i18n: Update settings navigation and section translations

- Restructure settings.sections and settings.nav in en.json
- Restore translations for existing keys across all locales (de, es, fr, he, ja, ko, ru, zh-CN, zh-TW)
- Add translations for new keys: metadata, library
- Translate autoOrganize section titles
- Complete all TODO translations in settings.search
This commit is contained in:
Will Miao
2026-02-25 13:16:38 +08:00
parent 0f5b442ec4
commit 41d2f9d8b4
11 changed files with 314 additions and 378 deletions

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "Einstellungspfad: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "Inhaltsfilterung",
"videoSettings": "Video-Einstellungen",
"layoutSettings": "Layout-Einstellungen",
"folderSettings": "Standard-Roots",
"priorityTags": "Prioritäts-Tags",
"downloadPathTemplates": "Download-Pfad-Vorlagen",
"exampleImages": "Beispielbilder",
"updateFlags": "Update-Markierungen",
"autoOrganize": "Auto-organize",
"misc": "Verschiedenes",
"metadataArchive": "Metadaten-Archiv-Datenbank",
"storageLocation": "Einstellungsort",
"folderSettings": "Standard-Roots",
"downloadPathTemplates": "Download-Pfad-Vorlagen",
"priorityTags": "Prioritäts-Tags",
"updateFlags": "Update-Markierungen",
"exampleImages": "Beispielbilder",
"autoOrganize": "Auto-Organisierung",
"metadata": "Metadaten",
"proxySettings": "Proxy-Einstellungen"
},
"nav": {
"general": "Allgemein",
"interface": "Oberfläche",
"download": "Download",
"organization": "Organisation",
"system": "System",
"network": "Netzwerk"
"library": "Bibliothek"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "Einstellungen durchsuchen...",
"clear": "Suche löschen",
"noResults": "Keine Einstellungen gefunden für \"{query}\""
},
"storage": {
"locationLabel": "Portabler Modus",

View File

@@ -255,28 +255,23 @@
"clipboardFallback": "Settings path: {{path}}"
},
"sections": {
"apiConfiguration": "API Configuration",
"contentFiltering": "Content Filtering",
"videoSettings": "Video Settings",
"layoutSettings": "Layout Settings",
"misc": "Miscellaneous",
"folderSettings": "Default Roots",
"priorityTags": "Priority Tags",
"downloadPathTemplates": "Download Path Templates",
"exampleImages": "Example Images",
"priorityTags": "Priority Tags",
"updateFlags": "Update Flags",
"exampleImages": "Example Images",
"autoOrganize": "Auto-organize",
"misc": "Misc.",
"metadataArchive": "Metadata Archive Database",
"storageLocation": "Settings Location",
"metadata": "Metadata",
"proxySettings": "Proxy Settings"
},
"nav": {
"general": "General",
"interface": "Interface",
"download": "Download",
"organization": "Organization",
"system": "System",
"network": "Network"
"library": "Library"
},
"search": {
"placeholder": "Search settings...",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "Ruta de configuración: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "Filtrado de contenido",
"videoSettings": "Configuración de video",
"layoutSettings": "Configuración de diseño",
"folderSettings": "Raíces predeterminadas",
"priorityTags": "Etiquetas prioritarias",
"downloadPathTemplates": "Plantillas de rutas de descarga",
"exampleImages": "Imágenes de ejemplo",
"updateFlags": "Indicadores de actualización",
"autoOrganize": "Auto-organize",
"misc": "Varios",
"metadataArchive": "Base de datos de archivo de metadatos",
"storageLocation": "Ubicación de ajustes",
"folderSettings": "Raíces predeterminadas",
"downloadPathTemplates": "Plantillas de rutas de descarga",
"priorityTags": "Etiquetas prioritarias",
"updateFlags": "Indicadores de actualización",
"exampleImages": "Imágenes de ejemplo",
"autoOrganize": "Organización automática",
"metadata": "Metadatos",
"proxySettings": "Configuración de proxy"
},
"nav": {
"general": "General",
"interface": "Interfaz",
"download": "Descarga",
"organization": "Organización",
"system": "Sistema",
"network": "Red"
"library": "Biblioteca"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "Buscar ajustes...",
"clear": "Limpiar búsqueda",
"noResults": "No se encontraron ajustes que coincidan con \"{query}\""
},
"storage": {
"locationLabel": "Modo portátil",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "Chemin des paramètres: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "Filtrage du contenu",
"videoSettings": "Paramètres vidéo",
"layoutSettings": "Paramètres d'affichage",
"folderSettings": "Racines par défaut",
"priorityTags": "Étiquettes prioritaires",
"downloadPathTemplates": "Modèles de chemin de téléchargement",
"exampleImages": "Images d'exemple",
"updateFlags": "Indicateurs de mise à jour",
"autoOrganize": "Auto-organize",
"misc": "Divers",
"metadataArchive": "Base de données d'archive des métadonnées",
"storageLocation": "Emplacement des paramètres",
"folderSettings": "Racines par défaut",
"downloadPathTemplates": "Modèles de chemin de téléchargement",
"priorityTags": "Étiquettes prioritaires",
"updateFlags": "Indicateurs de mise à jour",
"exampleImages": "Images d'exemple",
"autoOrganize": "Organisation automatique",
"metadata": "Métadonnées",
"proxySettings": "Paramètres du proxy"
},
"nav": {
"general": "Général",
"interface": "Interface",
"download": "Téléchargement",
"organization": "Organisation",
"system": "Système",
"network": "Réseau"
"library": "Bibliothèque"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "Rechercher dans les paramètres...",
"clear": "Effacer la recherche",
"noResults": "Aucun paramètre trouvé correspondant à \"{query}\""
},
"storage": {
"locationLabel": "Mode portable",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "נתיב ההגדרות: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "סינון תוכן",
"videoSettings": "הגדרות וידאו",
"layoutSettings": "הגדרות פריסה",
"folderSettings": "תיקיות ברירת מחדל",
"priorityTags": "תגיות עדיפות",
"downloadPathTemplates": "תבניות נתיב הורדה",
"exampleImages": "תמונות דוגמה",
"updateFlags": "תגי עדכון",
"autoOrganize": "Auto-organize",
"misc": "שונות",
"metadataArchive": "מסד נתונים של ארכיון מטא-דאטה",
"storageLocation": "מיקום ההגדרות",
"folderSettings": "תיקיות ברירת מחדל",
"downloadPathTemplates": "תבניות נתיב הורדה",
"priorityTags": "תגיות עדיפות",
"updateFlags": "תגי עדכון",
"exampleImages": "תמונות דוגמה",
"autoOrganize": "ארגון אוטומטי",
"metadata": "מטא-נתונים",
"proxySettings": "הגדרות פרוקסי"
},
"nav": {
"general": "כללי",
"interface": "ממשק",
"download": "הורדה",
"organization": "ארגון",
"system": "מערכת",
"network": "רשת"
"library": "ספרייה"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "חיפוש בהגדרות...",
"clear": "נקה חיפוש",
"noResults": "לא נמצאו הגדרות תואמות ל-\"{query}\""
},
"storage": {
"locationLabel": "מצב נייד",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "設定パス: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "コンテンツフィルタリング",
"videoSettings": "動画設定",
"layoutSettings": "レイアウト設定",
"folderSettings": "デフォルトルート",
"priorityTags": "優先タグ",
"downloadPathTemplates": "ダウンロードパステンプレート",
"exampleImages": "例画像",
"updateFlags": "アップデートフラグ",
"autoOrganize": "Auto-organize",
"misc": "その他",
"metadataArchive": "メタデータアーカイブデータベース",
"storageLocation": "設定の場所",
"folderSettings": "デフォルトルート",
"downloadPathTemplates": "ダウンロードパステンプレート",
"priorityTags": "優先タグ",
"updateFlags": "アップデートフラグ",
"exampleImages": "例画像",
"autoOrganize": "自動整理",
"metadata": "メタデータ",
"proxySettings": "プロキシ設定"
},
"nav": {
"general": "一般",
"interface": "インターフェース",
"download": "ダウンロード",
"organization": "整理",
"system": "システム",
"network": "ネットワーク"
"library": "ライブラリ"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "設定を検索...",
"clear": "検索をクリア",
"noResults": "\"{query}\" に一致する設定が見つかりません"
},
"storage": {
"locationLabel": "ポータブルモード",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "설정 경로: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "콘텐츠 필터링",
"videoSettings": "비디오 설정",
"layoutSettings": "레이아웃 설정",
"folderSettings": "기본 루트",
"priorityTags": "우선순위 태그",
"downloadPathTemplates": "다운로드 경로 템플릿",
"exampleImages": "예시 이미지",
"updateFlags": "업데이트 표시",
"autoOrganize": "Auto-organize",
"misc": "기타",
"metadataArchive": "메타데이터 아카이브 데이터베이스",
"storageLocation": "설정 위치",
"folderSettings": "기본 루트",
"downloadPathTemplates": "다운로드 경로 템플릿",
"priorityTags": "우선순위 태그",
"updateFlags": "업데이트 표시",
"exampleImages": "예시 이미지",
"autoOrganize": "자동 정리",
"metadata": "메타데이터",
"proxySettings": "프록시 설정"
},
"nav": {
"general": "일반",
"interface": "인터페이스",
"download": "다운로드",
"organization": "정리",
"system": "시스템",
"network": "네트워크"
"library": "라이브러리"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "설정 검색...",
"clear": "검색 지우기",
"noResults": "\"{query}\"와 일치하는 설정을 찾을 수 없습니다"
},
"storage": {
"locationLabel": "휴대용 모드",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "Путь настроек: {{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "Фильтрация контента",
"videoSettings": "Настройки видео",
"layoutSettings": "Настройки макета",
"folderSettings": "Корневые папки",
"priorityTags": "Приоритетные теги",
"downloadPathTemplates": "Шаблоны путей загрузки",
"exampleImages": "Примеры изображений",
"updateFlags": "Метки обновлений",
"autoOrganize": "Auto-organize",
"misc": "Разное",
"metadataArchive": "Архив метаданных",
"storageLocation": "Расположение настроек",
"folderSettings": "Корневые папки",
"downloadPathTemplates": "Шаблоны путей загрузки",
"priorityTags": "Приоритетные теги",
"updateFlags": "Метки обновлений",
"exampleImages": "Примеры изображений",
"autoOrganize": "Автоорганизация",
"metadata": "Метаданные",
"proxySettings": "Настройки прокси"
},
"nav": {
"general": "Общее",
"interface": "Интерфейс",
"download": "Загрузка",
"organization": "Организация",
"system": "Система",
"network": "Сеть"
"library": "Библиотека"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "Поиск в настройках...",
"clear": "Очистить поиск",
"noResults": "Настройки, соответствующие \"{query}\", не найдены"
},
"storage": {
"locationLabel": "Портативный режим",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "设置路径:{{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "内容过滤",
"videoSettings": "视频设置",
"layoutSettings": "布局设置",
"folderSettings": "默认根目录",
"priorityTags": "优先标签",
"downloadPathTemplates": "下载路径模板",
"exampleImages": "示例图片",
"updateFlags": "更新标记",
"autoOrganize": "Auto-organize",
"misc": "其他",
"metadataArchive": "元数据归档数据库",
"storageLocation": "设置位置",
"folderSettings": "默认根目录",
"downloadPathTemplates": "下载路径模板",
"priorityTags": "优先标签",
"updateFlags": "更新标记",
"exampleImages": "示例图片",
"autoOrganize": "自动整理",
"metadata": "元数据",
"proxySettings": "代理设置"
},
"nav": {
"general": "通用",
"interface": "界面",
"download": "下载",
"organization": "整理",
"system": "系统",
"network": "网络"
"library": "库"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "搜索设置...",
"clear": "清除搜索",
"noResults": "未找到匹配 \"{query}\" 的设置"
},
"storage": {
"locationLabel": "便携模式",

View File

@@ -255,33 +255,28 @@
"clipboardFallback": "設定路徑:{{path}}"
},
"sections": {
"apiConfiguration": "[TODO: Translate] API Configuration",
"contentFiltering": "內容過濾",
"videoSettings": "影片設定",
"layoutSettings": "版面設定",
"folderSettings": "預設根目錄",
"priorityTags": "優先標籤",
"downloadPathTemplates": "下載路徑範本",
"exampleImages": "範例圖片",
"updateFlags": "更新標記",
"autoOrganize": "Auto-organize",
"misc": "其他",
"metadataArchive": "中繼資料封存資料庫",
"storageLocation": "設定位置",
"folderSettings": "預設根目錄",
"downloadPathTemplates": "下載路徑範本",
"priorityTags": "優先標籤",
"updateFlags": "更新標記",
"exampleImages": "範例圖片",
"autoOrganize": "自動整理",
"metadata": "中繼資料",
"proxySettings": "代理設定"
},
"nav": {
"general": "通用",
"interface": "介面",
"download": "下載",
"organization": "整理",
"system": "系統",
"network": "網路"
"library": "模型庫"
},
"search": {
"placeholder": "[TODO: Translate] Search settings...",
"clear": "[TODO: Translate] Clear search",
"noResults": "[TODO: Translate] No settings found matching \"{query}\""
"placeholder": "搜尋設定...",
"clear": "清除搜尋",
"noResults": "未找到符合 \"{query}\" 的設定"
},
"storage": {
"locationLabel": "可攜式模式",

View File

@@ -35,10 +35,7 @@
<li class="settings-nav-group">
<button type="button" class="settings-nav-item active" data-section="general">{{ t('settings.nav.general') }}</button>
<button type="button" class="settings-nav-item" data-section="interface">{{ t('settings.nav.interface') }}</button>
<button type="button" class="settings-nav-item" data-section="download">{{ t('settings.nav.download') }}</button>
<button type="button" class="settings-nav-item" data-section="organization">{{ t('settings.nav.organization') }}</button>
<button type="button" class="settings-nav-item" data-section="system">{{ t('settings.nav.system') }}</button>
<button type="button" class="settings-nav-item" data-section="network">{{ t('settings.nav.network') }}</button>
<button type="button" class="settings-nav-item" data-section="library">{{ t('settings.nav.library') }}</button>
</li>
</ul>
</nav>
@@ -75,56 +72,170 @@
</div>
</div>
<!-- API Configuration -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.apiConfiguration') }}</h4>
<!-- Storage Location -->
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="usePortableSettings">
{{ t('settings.storage.locationLabel') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.storage.locationHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<label class="toggle-switch">
<input type="checkbox" id="usePortableSettings" {% if settings.get('use_portable_settings', False) %}checked{% endif %}
onchange="settingsManager.saveToggleSetting('usePortableSettings', 'use_portable_settings')">
<span class="toggle-slider"></span>
</label>
</div>
</div>
<div class="setting-item api-key-item">
<div class="setting-row">
<div class="setting-info">
<label for="civitaiApiKey">{{ t('settings.civitaiApiKey') }}</label>
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.civitaiApiKeyHelp') }}"></i>
</div>
<div class="setting-control">
<div class="api-key-input">
<input type="password"
id="civitaiApiKey"
placeholder="{{ t('settings.civitaiApiKeyPlaceholder') }}"
value="{{ settings.get('civitai_api_key', '') }}"
onblur="settingsManager.saveInputSetting('civitaiApiKey', 'civitai_api_key')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
<button class="toggle-visibility">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
<!-- API Configuration -->
<div class="setting-item api-key-item">
<div class="setting-row">
<div class="setting-info">
<label for="civitaiApiKey">{{ t('settings.civitaiApiKey') }}</label>
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.civitaiApiKeyHelp') }}"></i>
</div>
<div class="setting-control">
<div class="api-key-input">
<input type="password"
id="civitaiApiKey"
placeholder="{{ t('settings.civitaiApiKeyPlaceholder') }}"
value="{{ settings.get('civitai_api_key', '') }}"
onblur="settingsManager.saveInputSetting('civitaiApiKey', 'civitai_api_key')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
<button class="toggle-visibility">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Storage Location -->
<!-- Proxy Settings -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.storageLocation') }}</h4>
<h4>{{ t('settings.sections.proxySettings') }}</h4>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="usePortableSettings">
{{ t('settings.storage.locationLabel') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.storage.locationHelp') }}"></i>
</label>
<label for="proxyEnabled">
{{ t('settings.proxySettings.enableProxy') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.enableProxyHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<label class="toggle-switch">
<input type="checkbox" id="usePortableSettings" {% if settings.get('use_portable_settings', False) %}checked{% endif %}
onchange="settingsManager.saveToggleSetting('usePortableSettings', 'use_portable_settings')">
<input type="checkbox" id="proxyEnabled"
onchange="settingsManager.saveToggleSetting('proxyEnabled', 'proxy_enabled')">
<span class="toggle-slider"></span>
</label>
</div>
</div>
</div>
<div id="proxySettingsGroup" class="proxy-settings-group" style="display: none;">
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyType">
{{ t('settings.proxySettings.proxyType') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyTypeHelp') }}"></i>
</label>
</div>
<div class="setting-control select-control">
<select id="proxyType" onchange="settingsManager.saveSelectSetting('proxyType', 'proxy_type')">
<option value="http">HTTP</option>
<option value="https">HTTPS</option>
<option value="socks4">SOCKS4</option>
<option value="socks5">SOCKS5</option>
</select>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyHost">
{{ t('settings.proxySettings.proxyHost') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyHostHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyHost"
placeholder="{{ t('settings.proxySettings.proxyHostPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyHost', 'proxy_host')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyPort">
{{ t('settings.proxySettings.proxyPort') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyPortHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyPort"
placeholder="{{ t('settings.proxySettings.proxyPortPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyPort', 'proxy_port')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyUsername">
{{ t('settings.proxySettings.proxyUsername') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyUsernameHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyUsername"
placeholder="{{ t('settings.proxySettings.proxyUsernamePlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyUsername', 'proxy_username')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyPassword">
{{ t('settings.proxySettings.proxyPassword') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyPasswordHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="api-key-input">
<input type="password" id="proxyPassword"
placeholder="{{ t('settings.proxySettings.proxyPasswordPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyPassword', 'proxy_password')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
<button class="toggle-visibility">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -295,10 +406,34 @@
</div>
</div>
</div>
<!-- Miscellaneous -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.misc') }}</h4>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="includeTriggerWords">
{{ t('settings.misc.includeTriggerWords') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.misc.includeTriggerWordsHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<label class="toggle-switch">
<input type="checkbox" id="includeTriggerWords"
onchange="settingsManager.saveToggleSetting('includeTriggerWords', 'include_trigger_words')">
<span class="toggle-slider"></span>
</label>
</div>
</div>
</div>
</div>
</div>
<!-- Section 3: Download -->
<div id="section-download" class="settings-section" data-section="download">
<!-- Section 3: Library -->
<div id="section-library" class="settings-section" data-section="library">
<!-- Folder Settings -->
<div class="settings-subsection">
<div class="settings-subsection-header">
@@ -643,46 +778,49 @@
</div>
</div>
</div>
</div>
<!-- Section 4: Organization -->
<div id="section-organization" class="settings-section" data-section="organization">
<!-- Auto-organize Exclusions -->
<div class="setting-item auto-organize-exclusions-item">
<div class="setting-row">
<div class="setting-info">
<label for="autoOrganizeExclusions">
{{ t('settings.autoOrganizeExclusions.label') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.autoOrganizeExclusions.help') }}"></i>
</label>
</div>
</div>
<textarea id="autoOrganizeExclusions" class="priority-tags-input auto-organize-exclusions-input" placeholder="{{ t('settings.autoOrganizeExclusions.placeholder') }}"></textarea>
<div class="settings-input-error-message" id="autoOrganizeExclusionsError"></div>
</div>
<!-- Metadata Refresh Skip Paths -->
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="metadataRefreshSkipPaths">
{{ t('settings.metadataRefreshSkipPaths.label') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.metadataRefreshSkipPaths.help') }}"></i>
</label>
</div>
</div>
<textarea id="metadataRefreshSkipPaths" class="priority-tags-input auto-organize-exclusions-input" placeholder="{{ t('settings.metadataRefreshSkipPaths.placeholder') }}"></textarea>
<div class="settings-input-error-message" id="metadataRefreshSkipPathsError"></div>
</div>
</div>
<!-- Section 5: System -->
<div id="section-system" class="settings-section" data-section="system">
<!-- Metadata Archive -->
<!-- Auto-organize -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.metadataArchive') }}</h4>
<h4>{{ t('settings.sections.autoOrganize') }}</h4>
</div>
<!-- Auto-organize Exclusions -->
<div class="setting-item auto-organize-exclusions-item">
<div class="setting-row">
<div class="setting-info">
<label for="autoOrganizeExclusions">
{{ t('settings.autoOrganizeExclusions.label') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.autoOrganizeExclusions.help') }}"></i>
</label>
</div>
</div>
<textarea id="autoOrganizeExclusions" class="priority-tags-input auto-organize-exclusions-input" placeholder="{{ t('settings.autoOrganizeExclusions.placeholder') }}"></textarea>
<div class="settings-input-error-message" id="autoOrganizeExclusionsError"></div>
</div>
</div>
<!-- Metadata -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.metadata') }}</h4>
</div>
<!-- Metadata Refresh Skip Paths -->
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="metadataRefreshSkipPaths">
{{ t('settings.metadataRefreshSkipPaths.label') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.metadataRefreshSkipPaths.help') }}"></i>
</label>
</div>
</div>
<textarea id="metadataRefreshSkipPaths" class="priority-tags-input auto-organize-exclusions-input" placeholder="{{ t('settings.metadataRefreshSkipPaths.placeholder') }}"></textarea>
<div class="settings-input-error-message" id="metadataRefreshSkipPathsError"></div>
</div>
<!-- Metadata Archive -->
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
@@ -726,159 +864,7 @@
</div>
</div>
</div>
<!-- Misc -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.misc') }}</h4>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="includeTriggerWords">
{{ t('settings.misc.includeTriggerWords') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.misc.includeTriggerWordsHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<label class="toggle-switch">
<input type="checkbox" id="includeTriggerWords"
onchange="settingsManager.saveToggleSetting('includeTriggerWords', 'include_trigger_words')">
<span class="toggle-slider"></span>
</label>
</div>
</div>
</div>
</div>
</div>
<!-- Section 6: Network -->
<div id="section-network" class="settings-section" data-section="network">
<!-- Proxy Settings -->
<div class="settings-subsection">
<div class="settings-subsection-header">
<h4>{{ t('settings.sections.proxySettings') }}</h4>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyEnabled">
{{ t('settings.proxySettings.enableProxy') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.enableProxyHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<label class="toggle-switch">
<input type="checkbox" id="proxyEnabled"
onchange="settingsManager.saveToggleSetting('proxyEnabled', 'proxy_enabled')">
<span class="toggle-slider"></span>
</label>
</div>
</div>
</div>
<div id="proxySettingsGroup" class="proxy-settings-group" style="display: none;">
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyType">
{{ t('settings.proxySettings.proxyType') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyTypeHelp') }}"></i>
</label>
</div>
<div class="setting-control select-control">
<select id="proxyType" onchange="settingsManager.saveSelectSetting('proxyType', 'proxy_type')">
<option value="http">HTTP</option>
<option value="https">HTTPS</option>
<option value="socks4">SOCKS4</option>
<option value="socks5">SOCKS5</option>
</select>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyHost">
{{ t('settings.proxySettings.proxyHost') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyHostHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyHost"
placeholder="{{ t('settings.proxySettings.proxyHostPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyHost', 'proxy_host')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyPort">
{{ t('settings.proxySettings.proxyPort') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyPortHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyPort"
placeholder="{{ t('settings.proxySettings.proxyPortPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyPort', 'proxy_port')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyUsername">
{{ t('settings.proxySettings.proxyUsername') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyUsernameHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="text-input-wrapper">
<input type="text" id="proxyUsername"
placeholder="{{ t('settings.proxySettings.proxyUsernamePlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyUsername', 'proxy_username')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
</div>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-row">
<div class="setting-info">
<label for="proxyPassword">
{{ t('settings.proxySettings.proxyPassword') }}
<i class="fas fa-info-circle info-icon" data-tooltip="{{ t('settings.proxySettings.proxyPasswordHelp') }}"></i>
</label>
</div>
<div class="setting-control">
<div class="api-key-input">
<input type="password" id="proxyPassword"
placeholder="{{ t('settings.proxySettings.proxyPasswordPlaceholder') }}"
onblur="settingsManager.saveInputSetting('proxyPassword', 'proxy_password')"
onkeydown="if(event.key === 'Enter') { this.blur(); }" />
<button class="toggle-visibility">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>