From d04cc4e27214916667e8a62da27237a440f7abe2 Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Wed, 4 Dec 2024 10:51:37 -0800 Subject: [PATCH] Translate dynamically added settings (#1794) * Collect settings i18n at runtime * Translation * Remove unused file --- lint-staged.config.js | 7 +--- scripts/collect-i18n.ts | 28 +++++++++++++-- scripts/update-constants-locale.ts | 43 ----------------------- src/locales/en.json | 56 +++++++++++++++++++++--------- src/locales/ja.json | 24 +++++++++++++ src/locales/ru.json | 24 +++++++++++++ src/locales/zh.json | 24 +++++++++++++ src/stores/workspaceStore.ts | 1 + 8 files changed, 140 insertions(+), 67 deletions(-) delete mode 100644 scripts/update-constants-locale.ts diff --git a/lint-staged.config.js b/lint-staged.config.js index b3bfdc2f0..f042dca92 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -8,12 +8,7 @@ export default { 'tsc-strict' ], - './src/locales/en.json': () => ['lobe-i18n locale'], - - './src/constants/*.ts': () => [ - 'tsx scripts/update-constants-locale.ts', - 'lobe-i18n locale' - ] + './src/locales/en.json': () => ['lobe-i18n locale'] } function formatFiles(fileNames) { diff --git a/scripts/collect-i18n.ts b/scripts/collect-i18n.ts index 09802f20a..7024ee0b4 100644 --- a/scripts/collect-i18n.ts +++ b/scripts/collect-i18n.ts @@ -1,8 +1,9 @@ import * as fs from 'fs' import { comfyPageFixture as test } from '../browser_tests/fixtures/ComfyPage' -import type { ComfyCommandImpl } from '../src/stores/commandStore' import { CORE_MENU_COMMANDS } from '../src/constants/coreMenuCommands' import { normalizeI18nKey } from '../src/utils/formatUtil' +import type { ComfyCommandImpl } from '../src/stores/commandStore' +import type { SettingParams } from '../src/types/settingTypes' const localePath = './src/locales/en.json' const extractMenuCommandLocaleStrings = (): Set => { @@ -36,12 +37,35 @@ test('collect-i18n', async ({ comfyPage }) => { Array.from(allLabels).map((label) => [normalizeI18nKey(label), label]) ) + const settings = await comfyPage.page.evaluate(() => { + const workspace = window['app'].extensionManager + const settings = workspace.setting.settings as Record + return Object.values(settings) + .sort((a, b) => a.id.localeCompare(b.id)) + .map((setting) => ({ + id: setting.id, + name: setting.name, + tooltip: setting.tooltip + })) + }) + + const allSettingsLocale = Object.fromEntries( + settings.map((setting) => [ + normalizeI18nKey(setting.id), + { + name: setting.name, + tooltip: setting.tooltip + } + ]) + ) + fs.writeFileSync( localePath, JSON.stringify( { ...locale, - menuLabels: allLabelsLocale + menuLabels: allLabelsLocale, + settingsDialog: allSettingsLocale }, null, 2 diff --git a/scripts/update-constants-locale.ts b/scripts/update-constants-locale.ts deleted file mode 100644 index 77405af80..000000000 --- a/scripts/update-constants-locale.ts +++ /dev/null @@ -1,43 +0,0 @@ -import fs from 'fs' -import { CORE_SETTINGS } from '../src/constants/coreSettings' - -interface SettingLocale { - name: string - tooltip?: string -} - -const extractSettingLocaleStrings = (): Record => { - return Object.fromEntries( - CORE_SETTINGS.sort((a, b) => a.id.localeCompare(b.id)).map((setting) => [ - // '.' is not allowed in JSON keys, so we replace it with '_' - setting.id.replace(/\./g, '_'), - { - name: setting.name, - tooltip: setting.tooltip - } - ]) - ) -} - -const main = () => { - const settingLocaleStrings = extractSettingLocaleStrings() - - const localePath = './src/locales/en.json' - const globalLocale = JSON.parse(fs.readFileSync(localePath, 'utf-8')) - fs.writeFileSync( - localePath, - JSON.stringify( - { - ...globalLocale, - settingsDialog: { - ...(globalLocale.settingsDialog ?? {}), - ...settingLocaleStrings - } - }, - null, - 2 - ) - ) -} - -main() diff --git a/src/locales/en.json b/src/locales/en.json index d4c98aae5..492cb94dd 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -135,6 +135,15 @@ "goToNode": "Go to Node", "settings": "Settings", "settingsDialog": { + "Comfy-Desktop_AutoUpdate": { + "name": "Automatically check for updates" + }, + "Comfy-Desktop_SendStatistics": { + "name": "Send anonymous crash reports" + }, + "Comfy_ColorPalette": { + "name": "Color Palette" + }, "Comfy_ConfirmClear": { "name": "Require confirmation when clearing workflow" }, @@ -188,22 +197,15 @@ "Comfy_GroupSelectedNodes_Padding": { "name": "Group selected nodes padding" }, + "Comfy_InvertMenuScrolling": { + "name": "Invert Context Menu Scrolling" + }, "Comfy_Keybinding_NewBindings": { "name": "Keybindings set by the user" }, "Comfy_Keybinding_UnsetBindings": { "name": "Keybindings unset by the user" }, - "Comfy_Logging_Enabled": { - "name": "Enable logging" - }, - "Comfy_MenuPosition": { - "name": "Save legacy menu's position" - }, - "Comfy_NodeSuggestions_number": { - "name": "Number of nodes suggestions", - "tooltip": "Only for litegraph searchbox/context menu" - }, "Comfy_LinkRelease_Action": { "name": "Action on link release (No modifier)" }, @@ -216,6 +218,24 @@ "Comfy_Locale": { "name": "Language" }, + "Comfy_Logging_Enabled": { + "name": "Enable logging" + }, + "Comfy_MaskEditor_BrushAdjustmentSpeed": { + "name": "Brush adjustment speed multiplier", + "tooltip": "Controls how quickly the brush size and hardness change when adjusting. Higher values mean faster changes." + }, + "Comfy_MaskEditor_UseDominantAxis": { + "name": "Lock brush adjustment to dominant axis", + "tooltip": "When enabled, brush adjustments will only affect size OR hardness based on which direction you move more" + }, + "Comfy_MaskEditor_UseNewEditor": { + "name": "Use new mask editor", + "tooltip": "Switch to the new mask editor interface" + }, + "Comfy_MenuPosition": { + "name": "Save legacy menu's position" + }, "Comfy_ModelLibrary_AutoLoadAll": { "name": "Automatically load all model folders", "tooltip": "If true, all folders will load as soon as you open the model library (this may cause delays while it loads). If false, root level model folders will only load once you click on them." @@ -235,9 +255,6 @@ "Comfy_Node_DoubleClickTitleToEdit": { "name": "Double click node title to edit" }, - "Comfy_NodeInputConversionSubmenus": { - "name": "In the node context menu, place the entries that convert between input/widget in sub-menus." - }, "Comfy_Node_MiddleClickRerouteNode": { "name": "Middle-click creates a new Reroute node" }, @@ -265,6 +282,9 @@ "Comfy_NodeBadge_NodeSourceBadgeMode": { "name": "Node source badge mode" }, + "Comfy_NodeInputConversionSubmenus": { + "name": "In the node context menu, place the entries that convert between input/widget in sub-menus." + }, "Comfy_NodeLibrary_Bookmarks": { "name": "Node library bookmarks with display name (deprecated)" }, @@ -293,6 +313,10 @@ "name": "Show node frequency in search results", "tooltip": "Only applies to the default implementation" }, + "Comfy_NodeSuggestions_number": { + "name": "Number of nodes suggestions", + "tooltip": "Only for litegraph searchbox/context menu" + }, "Comfy_Pointer_ClickBufferTime": { "name": "Pointer click drift delay", "tooltip": "After pressing a pointer button down, this is the maximum time (in milliseconds) that pointer movement can be ignored for.\n\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking." @@ -364,13 +388,13 @@ "name": "Validate node definitions (slow)", "tooltip": "Recommended for node developers. This will validate all node definitions on startup." }, + "Comfy_Validation_Workflows": { + "name": "Validate workflows" + }, "Comfy_WidgetControlMode": { "name": "Widget control mode", "tooltip": "Controls when widget values are updated (randomize/increment/decrement), either before the prompt is queued or after." }, - "Comfy_Validation_Workflows": { - "name": "Validate workflows" - }, "Comfy_Window_UnloadConfirmation": { "name": "Show confirmation when closing window" }, diff --git a/src/locales/ja.json b/src/locales/ja.json index cf3c16bd8..bcde643e5 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -232,6 +232,15 @@ }, "settings": "設定", "settingsDialog": { + "Comfy-Desktop_AutoUpdate": { + "name": "自動的に更新を確認する" + }, + "Comfy-Desktop_SendStatistics": { + "name": "匿名のクラッシュレポートを送信する" + }, + "Comfy_ColorPalette": { + "name": "カラーパレット" + }, "Comfy_ConfirmClear": { "name": "ワークフローをクリアする際に確認を要求する" }, @@ -285,6 +294,9 @@ "Comfy_Group_DoubleClickTitleToEdit": { "name": "グループタイトルをダブルクリックして編集" }, + "Comfy_InvertMenuScrolling": { + "name": "コンテキストメニューのスクロールを反転する" + }, "Comfy_Keybinding_NewBindings": { "name": "ユーザーによって設定されたキー割り当て" }, @@ -306,6 +318,18 @@ "Comfy_Logging_Enabled": { "name": "ログを有効にする" }, + "Comfy_MaskEditor_BrushAdjustmentSpeed": { + "name": "ブラシ調整速度の倍率", + "tooltip": "調整時にブラシのサイズと硬さがどれだけ速く変化するかを制御します。値が高いほど、変化が速くなります。" + }, + "Comfy_MaskEditor_UseDominantAxis": { + "name": "ブラシ調整を優先軸に固定する", + "tooltip": "有効にすると、ブラシの調整は、どの方向に多く動かすかに基づいて、サイズまたは硬さのいずれかにのみ影響します。" + }, + "Comfy_MaskEditor_UseNewEditor": { + "name": "新しいマスクエディタを使用する", + "tooltip": "新しいマスクエディタインターフェースに切り替えます。" + }, "Comfy_MenuPosition": { "name": "レガシーメニューの位置を保存" }, diff --git a/src/locales/ru.json b/src/locales/ru.json index bfba47628..2c16a3fa3 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -232,6 +232,15 @@ }, "settings": "Настройки", "settingsDialog": { + "Comfy-Desktop_AutoUpdate": { + "name": "Автоматически проверять обновления" + }, + "Comfy-Desktop_SendStatistics": { + "name": "Отправлять анонимные отчеты о сбоях" + }, + "Comfy_ColorPalette": { + "name": "Цветовая палитра" + }, "Comfy_ConfirmClear": { "name": "Требовать подтверждение при очистке рабочего процесса" }, @@ -285,6 +294,9 @@ "Comfy_Group_DoubleClickTitleToEdit": { "name": "Дважды щелкните по заголовку группы, чтобы редактировать" }, + "Comfy_InvertMenuScrolling": { + "name": "Инвертировать прокрутку контекстного меню" + }, "Comfy_Keybinding_NewBindings": { "name": "Сочетания клавиш, установленные пользователем" }, @@ -306,6 +318,18 @@ "Comfy_Logging_Enabled": { "name": "Включить ведение журнала" }, + "Comfy_MaskEditor_BrushAdjustmentSpeed": { + "name": "Множитель скорости регулировки кисти", + "tooltip": "Управляет тем, как быстро изменяются размер и жесткость кисти при регулировке. Более высокие значения означают более быстрые изменения." + }, + "Comfy_MaskEditor_UseDominantAxis": { + "name": "Закрепить регулировку кисти по доминирующей оси", + "tooltip": "При включении регулировки кисти будет влиять только на размер ИЛИ жесткость в зависимости от того, в каком направлении вы двигаетесь больше" + }, + "Comfy_MaskEditor_UseNewEditor": { + "name": "Использовать новый редактор масок", + "tooltip": "Переключиться на новый интерфейс редактора масок" + }, "Comfy_MenuPosition": { "name": "Сохранить положение старого меню" }, diff --git a/src/locales/zh.json b/src/locales/zh.json index 1cae0cb37..9344b9f28 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -232,6 +232,15 @@ }, "settings": "设置", "settingsDialog": { + "Comfy-Desktop_AutoUpdate": { + "name": "自动检查更新" + }, + "Comfy-Desktop_SendStatistics": { + "name": "发送匿名崩溃报告" + }, + "Comfy_ColorPalette": { + "name": "调色板" + }, "Comfy_ConfirmClear": { "name": "清除工作流时需要确认" }, @@ -285,6 +294,9 @@ "Comfy_Group_DoubleClickTitleToEdit": { "name": "双击组标题以编辑" }, + "Comfy_InvertMenuScrolling": { + "name": "反转上下文菜单滚动" + }, "Comfy_Keybinding_NewBindings": { "name": "用户设置的键绑定" }, @@ -306,6 +318,18 @@ "Comfy_Logging_Enabled": { "name": "启用日志记录" }, + "Comfy_MaskEditor_BrushAdjustmentSpeed": { + "name": "画笔调整速度倍增器", + "tooltip": "控制调整时画笔大小和硬度变化的速度。更高的值意味着更快的变化。" + }, + "Comfy_MaskEditor_UseDominantAxis": { + "name": "将画笔调整锁定到主轴", + "tooltip": "启用后,画笔调整将仅根据您移动的方向影响大小或硬度。" + }, + "Comfy_MaskEditor_UseNewEditor": { + "name": "使用新画笔编辑器", + "tooltip": "切换到新的画笔编辑器界面" + }, "Comfy_MenuPosition": { "name": "保存旧版菜单位置" }, diff --git a/src/stores/workspaceStore.ts b/src/stores/workspaceStore.ts index aa8d2f897..a7cae2495 100644 --- a/src/stores/workspaceStore.ts +++ b/src/stores/workspaceStore.ts @@ -25,6 +25,7 @@ export const useWorkspaceStore = defineStore('workspace', () => { })) const sidebarTab = computed(() => useSidebarTabStore()) const setting = computed(() => ({ + settings: useSettingStore().settings, get: useSettingStore().get, set: useSettingStore().set }))