mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 19:21:54 +00:00
Add i18n for side tool bar tooltips (#207)
* Add npm dep * Add i18n for side bar tooltips
This commit is contained in:
61
package-lock.json
generated
61
package-lock.json
generated
@@ -20,6 +20,7 @@
|
|||||||
"primevue": "^4.0.0-rc.2",
|
"primevue": "^4.0.0-rc.2",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"vue": "^3.4.31",
|
"vue": "^3.4.31",
|
||||||
|
"vue-i18n": "^9.13.1",
|
||||||
"zod": "^3.23.8",
|
"zod": "^3.23.8",
|
||||||
"zod-validation-error": "^3.3.0"
|
"zod-validation-error": "^3.3.0"
|
||||||
},
|
},
|
||||||
@@ -2189,6 +2190,47 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@intlify/core-base": {
|
||||||
|
"version": "9.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
|
||||||
|
"integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
|
||||||
|
"dependencies": {
|
||||||
|
"@intlify/message-compiler": "9.13.1",
|
||||||
|
"@intlify/shared": "9.13.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/kazupon"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@intlify/message-compiler": {
|
||||||
|
"version": "9.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
|
||||||
|
"integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
|
||||||
|
"dependencies": {
|
||||||
|
"@intlify/shared": "9.13.1",
|
||||||
|
"source-map-js": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/kazupon"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@intlify/shared": {
|
||||||
|
"version": "9.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
|
||||||
|
"integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/kazupon"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@isaacs/cliui": {
|
"node_modules/@isaacs/cliui": {
|
||||||
"version": "8.0.2",
|
"version": "8.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
||||||
@@ -9773,6 +9815,25 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vue-i18n": {
|
||||||
|
"version": "9.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz",
|
||||||
|
"integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@intlify/core-base": "9.13.1",
|
||||||
|
"@intlify/shared": "9.13.1",
|
||||||
|
"@vue/devtools-api": "^6.5.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/kazupon"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/w3c-xmlserializer": {
|
"node_modules/w3c-xmlserializer": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
|
||||||
|
|||||||
@@ -58,6 +58,7 @@
|
|||||||
"primevue": "^4.0.0-rc.2",
|
"primevue": "^4.0.0-rc.2",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"vue": "^3.4.31",
|
"vue": "^3.4.31",
|
||||||
|
"vue-i18n": "^9.13.1",
|
||||||
"zod": "^3.23.8",
|
"zod": "^3.23.8",
|
||||||
"zod-validation-error": "^3.3.0"
|
"zod-validation-error": "^3.3.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<SideBarIcon icon="pi pi-cog" @click="showSetting" tooltip="Settings" />
|
<SideBarIcon
|
||||||
|
icon="pi pi-cog"
|
||||||
|
@click="showSetting"
|
||||||
|
:tooltip="$t('sideToolBar.settings')"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<SideBarIcon :icon="icon" @click="toggleTheme" tooltip="Toggle Theme" />
|
<SideBarIcon
|
||||||
|
:icon="icon"
|
||||||
|
@click="toggleTheme"
|
||||||
|
:tooltip="$t('sideToolBar.themeToggle')"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|||||||
@@ -24,12 +24,14 @@ import SideBarSettingsToggleIcon from "./SideBarSettingsToggleIcon.vue";
|
|||||||
import NodeDetailSideBarItem from "./items/NodeDetailSideBarItem.vue";
|
import NodeDetailSideBarItem from "./items/NodeDetailSideBarItem.vue";
|
||||||
import QueueSideBarItem from "./items/QueueSideBarItem.vue";
|
import QueueSideBarItem from "./items/QueueSideBarItem.vue";
|
||||||
import { markRaw, onMounted, onUnmounted, ref, watch } from "vue";
|
import { markRaw, onMounted, onUnmounted, ref, watch } from "vue";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
const items = ref([
|
const items = ref([
|
||||||
// { icon: "pi pi-map", component: markRaw(NodeDetailSideBarItem) },
|
// { icon: "pi pi-map", component: markRaw(NodeDetailSideBarItem) },
|
||||||
{
|
{
|
||||||
icon: "pi pi-history",
|
icon: "pi pi-history",
|
||||||
tooltip: "Queue",
|
tooltip: t("sideToolBar.queue"),
|
||||||
component: markRaw(QueueSideBarItem),
|
component: markRaw(QueueSideBarItem),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|||||||
27
src/i18n.ts
Normal file
27
src/i18n.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import { createI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
const messages = {
|
||||||
|
en: {
|
||||||
|
sideToolBar: {
|
||||||
|
settings: "Settings",
|
||||||
|
themeToggle: "Toggle Theme",
|
||||||
|
queue: "Queue",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
zh: {
|
||||||
|
sideToolBar: {
|
||||||
|
settings: "设置",
|
||||||
|
themeToggle: "主题切换",
|
||||||
|
queue: "队列",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// TODO: Add more languages
|
||||||
|
};
|
||||||
|
|
||||||
|
export const i18n = createI18n({
|
||||||
|
// Must set `false`, as Vue I18n Legacy API is for Vue 2
|
||||||
|
legacy: false,
|
||||||
|
locale: navigator.language.split("-")[0] || "en",
|
||||||
|
fallbackLocale: "en",
|
||||||
|
messages,
|
||||||
|
});
|
||||||
@@ -10,6 +10,7 @@ import "primeicons/primeicons.css";
|
|||||||
import App from "./App.vue";
|
import App from "./App.vue";
|
||||||
import { app as comfyApp } from "@/scripts/app";
|
import { app as comfyApp } from "@/scripts/app";
|
||||||
import { createPinia } from "pinia";
|
import { createPinia } from "pinia";
|
||||||
|
import { i18n } from "./i18n";
|
||||||
|
|
||||||
const ComfyUIPreset = definePreset(Aura, {
|
const ComfyUIPreset = definePreset(Aura, {
|
||||||
semantic: {
|
semantic: {
|
||||||
@@ -42,5 +43,6 @@ comfyApp.setup().then(() => {
|
|||||||
.use(ConfirmationService)
|
.use(ConfirmationService)
|
||||||
.use(ToastService)
|
.use(ToastService)
|
||||||
.use(pinia)
|
.use(pinia)
|
||||||
|
.use(i18n)
|
||||||
.mount("#vue-app");
|
.mount("#vue-app");
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user