[Electron] Translate server config panel (#1817)

* Update i18 collection to include server config items

* Use translation

* Update locales [skip ci]

* nit

---------

Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
Chenlei Hu
2024-12-05 16:56:51 -08:00
committed by GitHub
parent 5cee4d828f
commit dac2a2ec86
6 changed files with 504 additions and 5 deletions

View File

@@ -1,9 +1,10 @@
import * as fs from 'fs'
import { comfyPageFixture as test } from '../browser_tests/fixtures/ComfyPage'
import { CORE_MENU_COMMANDS } from '../src/constants/coreMenuCommands'
import { SERVER_CONFIG_ITEMS } from '../src/constants/serverConfig'
import { formatCamelCase, normalizeI18nKey } from '../src/utils/formatUtil'
import type { ComfyCommandImpl } from '../src/stores/commandStore'
import type { SettingParams } from '../src/types/settingTypes'
import type { FormItem, SettingParams } from '../src/types/settingTypes'
const localePath = './src/locales/en.json'
const extractMenuCommandLocaleStrings = (): Set<string> => {
@@ -71,6 +72,25 @@ test('collect-i18n', async ({ comfyPage }) => {
])
)
const allServerConfigsLocale = Object.fromEntries(
SERVER_CONFIG_ITEMS.map((config) => [
normalizeI18nKey(config.id),
{
name: (config as unknown as FormItem).name,
tooltip: (config as unknown as FormItem).tooltip
}
])
)
const allServerConfigCategoriesLocale = Object.fromEntries(
SERVER_CONFIG_ITEMS.flatMap((config) => {
return config.category ?? ['General']
}).map((category) => [
normalizeI18nKey(category),
formatCamelCase(category)
])
)
fs.writeFileSync(
localePath,
JSON.stringify(
@@ -83,7 +103,9 @@ test('collect-i18n', async ({ comfyPage }) => {
settingsCategories: {
...(locale.settingsCategories ?? {}),
...allSettingCategoriesLocale
}
},
serverConfigItems: allServerConfigsLocale,
serverConfigCategories: allServerConfigCategoriesLocale
},
null,
2

View File

@@ -50,14 +50,14 @@
:key="label"
>
<Divider v-if="i > 0" />
<h3>{{ formatCamelCase(label) }}</h3>
<h3>{{ $t(`serverConfigCategories.${label}`, label) }}</h3>
<div
v-for="item in items"
:key="item.name"
class="flex items-center mb-4"
>
<FormItem
:item="item"
:item="translateItem(item)"
v-model:formValue="item.value"
:id="item.id"
:labelClass="{
@@ -75,13 +75,15 @@ import Message from 'primevue/message'
import Divider from 'primevue/divider'
import FormItem from '@/components/common/FormItem.vue'
import PanelTemplate from './PanelTemplate.vue'
import { formatCamelCase } from '@/utils/formatUtil'
import { useServerConfigStore } from '@/stores/serverConfigStore'
import { storeToRefs } from 'pinia'
import { electronAPI } from '@/utils/envUtil'
import { useSettingStore } from '@/stores/settingStore'
import { watch } from 'vue'
import { useCopyToClipboard } from '@/hooks/clipboardHooks'
import type { FormItem as FormItemType } from '@/types/settingTypes'
import type { ServerConfig } from '@/constants/serverConfig'
import { useI18n } from 'vue-i18n'
const settingStore = useSettingStore()
const serverConfigStore = useServerConfigStore()
@@ -113,4 +115,15 @@ const { copyToClipboard } = useCopyToClipboard()
const copyCommandLineArgs = async () => {
await copyToClipboard(commandLineArgs.value)
}
const { t } = useI18n()
const translateItem = (item: ServerConfig<any>): FormItemType => {
return {
...item,
name: t(`serverConfigItems.${item.id}.name`, item.name),
tooltip: item.tooltip
? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip)
: undefined
}
}
</script>

View File

@@ -637,5 +637,121 @@
"Window": "Window",
"Server-Config": "Server-Config",
"About": "About"
},
"serverConfigItems": {
"tls-keyfile": {
"name": "TLS Key File: Path to TLS key file for HTTPS"
},
"tls-certfile": {
"name": "TLS Certificate File: Path to TLS certificate file for HTTPS"
},
"enable-cors-header": {
"name": "Enable CORS header: Use \"*\" for all origins or specify domain"
},
"max-upload-size": {
"name": "Maximum upload size (MB)"
},
"cuda-device": {
"name": "CUDA device index to use"
},
"cuda-malloc": {
"name": "Use CUDA malloc for memory allocation"
},
"global-precision": {
"name": "Global floating point precision",
"tooltip": "Global floating point precision"
},
"unet-precision": {
"name": "UNET precision",
"tooltip": "UNET precision"
},
"vae-precision": {
"name": "VAE precision",
"tooltip": "VAE precision"
},
"cpu-vae": {
"name": "Run VAE on CPU"
},
"text-encoder-precision": {
"name": "Text Encoder precision",
"tooltip": "Text Encoder precision"
},
"force-channels-last": {
"name": "Force channels-last memory format"
},
"directml": {
"name": "DirectML device index"
},
"disable-ipex-optimize": {
"name": "Disable IPEX optimization"
},
"preview-method": {
"name": "Method used for latent previews"
},
"preview-size": {
"name": "Size of preview images"
},
"cache-classic": {
"name": "Use classic cache system"
},
"cache-lru": {
"name": "Use LRU caching with a maximum of N node results cached.",
"tooltip": "May use more RAM/VRAM."
},
"cross-attention-method": {
"name": "Cross attention method"
},
"disable-xformers": {
"name": "Disable xFormers optimization"
},
"force-upcast-attention": {
"name": "Force attention upcast"
},
"dont-upcast-attention": {
"name": "Prevent attention upcast"
},
"vram-management": {
"name": "VRAM management mode"
},
"reserve-vram": {
"name": "Reserved VRAM (GB)",
"tooltip": "Set the amount of vram in GB you want to reserve for use by your OS/other software. By default some amount is reverved depending on your OS."
},
"default-hashing-function": {
"name": "Default hashing function for model files"
},
"disable-smart-memory": {
"name": "Disable smart memory management",
"tooltip": "Force ComfyUI to aggressively offload to regular ram instead of keeping models in vram when it can."
},
"deterministic": {
"name": "Make pytorch use slower deterministic algorithms when it can.",
"tooltip": "Note that this might not make images deterministic in all cases."
},
"fast": {
"name": "Enable some untested and potentially quality deteriorating optimizations."
},
"dont-print-server": {
"name": "Don't print server output to console."
},
"disable-metadata": {
"name": "Disable saving prompt metadata in files."
},
"disable-all-custom-nodes": {
"name": "Disable loading all custom nodes."
},
"log-level": {
"name": "Logging verbosity level"
}
},
"serverConfigCategories": {
"Network": "Network",
"CUDA": "CUDA",
"Inference": "Inference",
"Memory": "Memory",
"Preview": "Preview",
"Cache": "Cache",
"Attention": "Attention",
"General": "General"
}
}

View File

@@ -233,6 +233,122 @@
"restart": "再起動",
"revertChanges": "変更を元に戻す"
},
"serverConfigCategories": {
"Attention": "アテンション",
"CUDA": "CUDA",
"Cache": "キャッシュ",
"General": "一般",
"Inference": "推論",
"Memory": "メモリ",
"Network": "ネットワーク",
"Preview": "プレビュー"
},
"serverConfigItems": {
"cache-classic": {
"name": "クラシックキャッシュシステムを使用する"
},
"cache-lru": {
"name": "最大Nード結果をキャッシュするLRUキャッシングを使用する。",
"tooltip": "RAM/VRAMを多く使用する可能性があります。"
},
"cpu-vae": {
"name": "CPUでVAEを実行する"
},
"cross-attention-method": {
"name": "クロスアテンションメソッド"
},
"cuda-device": {
"name": "使用するCUDAデバイスインデックス"
},
"cuda-malloc": {
"name": "メモリ割り当てにCUDA mallocを使用する"
},
"default-hashing-function": {
"name": "モデルファイルのデフォルトハッシュ関数"
},
"deterministic": {
"name": "可能な場合、PyTorchが遅い決定論的アルゴリズムを使用する。",
"tooltip": "これにより、すべてのケースで画像が決定論的になるわけではないことに注意してください。"
},
"directml": {
"name": "DirectMLデバイスインデックス"
},
"disable-all-custom-nodes": {
"name": "すべてのカスタムノードの読み込みを無効にする。"
},
"disable-ipex-optimize": {
"name": "IPEX最適化を無効にする"
},
"disable-metadata": {
"name": "ファイルにプロンプトメタデータを保存しない。"
},
"disable-smart-memory": {
"name": "スマートメモリ管理を無効にする",
"tooltip": "ComfyUIがモデルをVRAMに保持する代わりに、通常のRAMに積極的にオフロードするように強制します。"
},
"disable-xformers": {
"name": "xFormers最適化を無効にする"
},
"dont-print-server": {
"name": "サーバー出力をコンソールに表示しない。"
},
"dont-upcast-attention": {
"name": "アテンションのアップキャストを防ぐ"
},
"enable-cors-header": {
"name": "CORSヘッダーを有効にする: \"*\"を使用してすべてのオリジンを許可するか、ドメインを指定する"
},
"fast": {
"name": "未テストの潜在的に品質を低下させる最適化を有効にする。"
},
"force-channels-last": {
"name": "チャネルを最後に強制するメモリ形式"
},
"force-upcast-attention": {
"name": "アテンションのアップキャストを強制する"
},
"global-precision": {
"name": "グローバル浮動小数点精度",
"tooltip": "グローバル浮動小数点精度"
},
"log-level": {
"name": "ログの冗長性レベル"
},
"max-upload-size": {
"name": "最大アップロードサイズ (MB)"
},
"preview-method": {
"name": "潜在プレビューに使用されるメソッド"
},
"preview-size": {
"name": "プレビュー画像のサイズ"
},
"reserve-vram": {
"name": "予約済みVRAM (GB)",
"tooltip": "OS/他のソフトウェアで使用するために予約したいVRAMの量をGB単位で設定します。デフォルトでは、OSに応じていくらかの量が予約されます。"
},
"text-encoder-precision": {
"name": "テキストエンコーダー精度",
"tooltip": "テキストエンコーダー精度"
},
"tls-certfile": {
"name": "TLS証明書ファイル: HTTPS用のTLS証明書ファイルのパス"
},
"tls-keyfile": {
"name": "TLSキーファイル: HTTPS用のTLSキーファイルのパス"
},
"unet-precision": {
"name": "UNET精度",
"tooltip": "UNET精度"
},
"vae-precision": {
"name": "VAE精度",
"tooltip": "VAE精度"
},
"vram-management": {
"name": "VRAM管理モード"
}
},
"serverStart": {
"openLogs": "ログを開く",
"process": {

View File

@@ -233,6 +233,122 @@
"restart": "Перезапустить",
"revertChanges": "Отменить изменения"
},
"serverConfigCategories": {
"Attention": "Внимание",
"CUDA": "CUDA",
"Cache": "Кэш",
"General": "Общее",
"Inference": "Вывод",
"Memory": "Память",
"Network": "Сеть",
"Preview": "Предпросмотр"
},
"serverConfigItems": {
"cache-classic": {
"name": "Использовать классическую систему кэширования"
},
"cache-lru": {
"name": "Использовать LRU кэширование с максимальным количеством N кэшированных результатов узлов.",
"tooltip": "Может использовать больше ОЗУ/ВРП."
},
"cpu-vae": {
"name": "Запуск VAE на CPU"
},
"cross-attention-method": {
"name": "Метод перекрестного внимания"
},
"cuda-device": {
"name": "Индекс устройства CUDA для использования"
},
"cuda-malloc": {
"name": "Использовать CUDA malloc для выделения памяти"
},
"default-hashing-function": {
"name": "Функция хеширования по умолчанию для файлов моделей"
},
"deterministic": {
"name": "Заставить pytorch использовать более медленные детерминированные алгоритмы, когда это возможно.",
"tooltip": "Обратите внимание, что это может не сделать изображения детерминированными во всех случаях."
},
"directml": {
"name": "Индекс устройства DirectML"
},
"disable-all-custom-nodes": {
"name": "Отключить загрузку всех пользовательских узлов."
},
"disable-ipex-optimize": {
"name": "Отключить оптимизацию IPEX"
},
"disable-metadata": {
"name": "Отключить сохранение метаданных подсказок в файлах."
},
"disable-smart-memory": {
"name": "Отключить управление умной памятью",
"tooltip": "Принудить ComfyUI агрессивно выгружать в обычную оперативную память вместо того, чтобы держать модели в VRAM, когда это возможно."
},
"disable-xformers": {
"name": "Отключить оптимизацию xFormers"
},
"dont-print-server": {
"name": "Не выводить вывод сервера в консоль."
},
"dont-upcast-attention": {
"name": "Предотвратить повышение внимания"
},
"enable-cors-header": {
"name": "Включить CORS заголовок: Используйте \"*\" для всех источников или укажите домен"
},
"fast": {
"name": "Включить некоторые непроверенные и потенциально ухудшающие качество оптимизации."
},
"force-channels-last": {
"name": "Принудительное использование формата памяти с последними каналами"
},
"force-upcast-attention": {
"name": "Принудительное повышение внимания"
},
"global-precision": {
"name": "Глобальная точность с плавающей запятой",
"tooltip": "Глобальная точность с плавающей запятой"
},
"log-level": {
"name": "Уровень подробности логирования"
},
"max-upload-size": {
"name": "Максимальный размер загрузки (МБ)"
},
"preview-method": {
"name": "Метод, используемый для латентных превью"
},
"preview-size": {
"name": "Размер превью изображений"
},
"reserve-vram": {
"name": "Резервируемая VRAM (ГБ)",
"tooltip": "Установите количество VRAM в ГБ, которое вы хотите зарезервировать для использования вашей ОС/другими программами. По умолчанию резервируется определенное количество в зависимости от вашей ОС."
},
"text-encoder-precision": {
"name": "Точность текстового кодировщика",
"tooltip": "Точность текстового кодировщика"
},
"tls-certfile": {
"name": "TLS сертификат: Путь к TLS сертификату для HTTPS"
},
"tls-keyfile": {
"name": "TLS ключевой файл: Путь к TLS ключевому файлу для HTTPS"
},
"unet-precision": {
"name": "Точность UNET",
"tooltip": "Точность UNET"
},
"vae-precision": {
"name": "Точность VAE",
"tooltip": "Точность VAE"
},
"vram-management": {
"name": "Режим управления VRAM"
}
},
"serverStart": {
"openLogs": "Открыть логи",
"process": {

View File

@@ -233,6 +233,122 @@
"restart": "重启",
"revertChanges": "撤销更改"
},
"serverConfigCategories": {
"Attention": "注意力",
"CUDA": "CUDA",
"Cache": "缓存",
"General": "常规",
"Inference": "推理",
"Memory": "内存",
"Network": "网络",
"Preview": "预览"
},
"serverConfigItems": {
"cache-classic": {
"name": "使用经典缓存系统"
},
"cache-lru": {
"name": "使用 LRU 缓存,最多缓存 N 个节点结果。",
"tooltip": "可能会使用更多的 RAM/VRAM。"
},
"cpu-vae": {
"name": "在 CPU 上运行 VAE"
},
"cross-attention-method": {
"name": "交叉注意力方法"
},
"cuda-device": {
"name": "要使用的 CUDA 设备索引"
},
"cuda-malloc": {
"name": "使用 CUDA malloc 进行内存分配"
},
"default-hashing-function": {
"name": "模型文件的默认哈希函数"
},
"deterministic": {
"name": "使 pytorch 在可以时使用较慢的确定性算法。",
"tooltip": "请注意,这可能不会在所有情况下使图像具有确定性。"
},
"directml": {
"name": "DirectML 设备索引"
},
"disable-all-custom-nodes": {
"name": "禁用加载所有自定义节点。"
},
"disable-ipex-optimize": {
"name": "禁用 IPEX 优化"
},
"disable-metadata": {
"name": "禁用在文件中保存提示元数据。"
},
"disable-smart-memory": {
"name": "禁用智能内存管理",
"tooltip": "强制 ComfyUI 在可以时将模型从 VRAM 移出到常规 RAM。"
},
"disable-xformers": {
"name": "禁用 xFormers 优化"
},
"dont-print-server": {
"name": "不将服务器输出打印到控制台。"
},
"dont-upcast-attention": {
"name": "防止注意力上升"
},
"enable-cors-header": {
"name": "启用 CORS 头:使用 \"*\" 代表所有来源或指定域名"
},
"fast": {
"name": "启用一些未经测试且可能降低质量的优化。"
},
"force-channels-last": {
"name": "强制使用 channels-last 内存格式"
},
"force-upcast-attention": {
"name": "强制注意力上升"
},
"global-precision": {
"name": "全局浮点精度",
"tooltip": "全局浮点精度"
},
"log-level": {
"name": "日志详细级别"
},
"max-upload-size": {
"name": "最大上传大小 (MB)"
},
"preview-method": {
"name": "用于潜在预览的方法"
},
"preview-size": {
"name": "预览图像的大小"
},
"reserve-vram": {
"name": "保留 VRAM (GB)",
"tooltip": "设置您希望为操作系统/其他软件保留的 VRAM 数量(以 GB 为单位)。默认情况下,根据您的操作系统保留一定数量。"
},
"text-encoder-precision": {
"name": "文本编码器精度",
"tooltip": "文本编码器精度"
},
"tls-certfile": {
"name": "TLS 证书文件HTTPS 的 TLS 证书文件路径"
},
"tls-keyfile": {
"name": "TLS 密钥文件HTTPS 的 TLS 密钥文件路径"
},
"unet-precision": {
"name": "UNET 精度",
"tooltip": "UNET 精度"
},
"vae-precision": {
"name": "VAE 精度",
"tooltip": "VAE 精度"
},
"vram-management": {
"name": "VRAM 管理模式"
}
},
"serverStart": {
"openLogs": "打开日志",
"process": {