Translate dynamically added settings (#1794)

* Collect settings i18n at runtime

* Translation

* Remove unused file
This commit is contained in:
Chenlei Hu
2024-12-04 10:51:37 -08:00
committed by GitHub
parent 473aa120eb
commit d04cc4e272
8 changed files with 140 additions and 67 deletions

View File

@@ -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) {

View File

@@ -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<string> => {
@@ -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<string, SettingParams>
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

View File

@@ -1,43 +0,0 @@
import fs from 'fs'
import { CORE_SETTINGS } from '../src/constants/coreSettings'
interface SettingLocale {
name: string
tooltip?: string
}
const extractSettingLocaleStrings = (): Record<string, SettingLocale> => {
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()

View File

@@ -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"
},

View File

@@ -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": "レガシーメニューの位置を保存"
},

View File

@@ -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": "Сохранить положение старого меню"
},

View File

@@ -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": "保存旧版菜单位置"
},

View File

@@ -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
}))