From 8277d7a9e16db26defd4ed4a6fb34b41720c08b1 Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Mon, 17 Mar 2025 11:12:14 +0800 Subject: [PATCH] feat(stage-web|stage-tamagotchi): i18n --- .../src/renderer/locales/en.yml | 218 ++++++++++++- .../src/renderer/locales/zh-CN.yml | 211 ++++++++++++- .../renderer/src/components/ChatHistory.vue | 4 +- .../src/renderer/src/pages/settings/index.vue | 22 +- .../src/pages/settings/models/index.vue | 33 +- .../pages/settings/modules/consciousness.vue | 48 +-- .../src/pages/settings/modules/index.vue | 42 +-- .../src/pages/settings/modules/speech.vue | 4 +- .../providers/cloudflare-workers-ai.vue | 14 +- .../src/pages/settings/providers/deepseek.vue | 8 +- .../pages/settings/providers/elevenlabs.vue | 92 +++--- .../pages/settings/providers/fireworks-ai.vue | 8 +- .../src/pages/settings/providers/index.vue | 6 +- .../pages/settings/providers/mistral-ai.vue | 8 +- .../pages/settings/providers/moonshot-ai.vue | 8 +- .../pages/settings/providers/novita-ai.vue | 8 +- .../src/pages/settings/providers/ollama.vue | 16 +- .../src/pages/settings/providers/openai.vue | 8 +- .../settings/providers/openrouter-ai.vue | 8 +- .../pages/settings/providers/together-ai.vue | 8 +- .../src/pages/settings/providers/xai.vue | 8 +- .../src/pages/settings/themes/index.vue | 41 +-- apps/stage-web/locales/en.yml | 278 ++++++++++++----- apps/stage-web/locales/zh-CN.yml | 287 +++++++++++++----- .../components/Layouts/InteractiveArea.vue | 14 +- .../src/components/Widgets/ChatHistory.vue | 15 +- .../components/Widgets/MobileChatHistory.vue | 6 +- apps/stage-web/src/pages/settings/index.vue | 22 +- .../src/pages/settings/models/index.vue | 6 +- .../pages/settings/modules/consciousness.vue | 48 +-- .../src/pages/settings/modules/index.vue | 42 +-- .../src/pages/settings/modules/speech.vue | 4 +- .../providers/cloudflare-workers-ai.vue | 14 +- .../src/pages/settings/providers/deepseek.vue | 8 +- .../pages/settings/providers/elevenlabs.vue | 92 +++--- .../pages/settings/providers/fireworks-ai.vue | 8 +- .../src/pages/settings/providers/index.vue | 6 +- .../pages/settings/providers/mistral-ai.vue | 8 +- .../pages/settings/providers/moonshot-ai.vue | 8 +- .../pages/settings/providers/novita-ai.vue | 8 +- .../src/pages/settings/providers/ollama.vue | 16 +- .../src/pages/settings/providers/openai.vue | 8 +- .../settings/providers/openrouter-ai.vue | 8 +- .../pages/settings/providers/together-ai.vue | 8 +- .../src/pages/settings/providers/xai.vue | 8 +- .../src/pages/settings/themes/index.vue | 41 +-- .../stage-ui/src/components/Scenes/Live2D.vue | 18 +- .../stage-ui/src/components/Scenes/VRM.vue | 21 +- packages/stage-ui/src/stores/providers.ts | 56 ++-- packages/stage-ui/src/stores/settings.ts | 2 +- 50 files changed, 1300 insertions(+), 583 deletions(-) diff --git a/apps/stage-tamagotchi/src/renderer/locales/en.yml b/apps/stage-tamagotchi/src/renderer/locales/en.yml index f66b853c7..0ab29cb93 100644 --- a/apps/stage-tamagotchi/src/renderer/locales/en.yml +++ b/apps/stage-tamagotchi/src/renderer/locales/en.yml @@ -43,26 +43,12 @@ prompt: And the last, do what ever you want! settings: - elevenlabs-api-key: - label: ElevenLabs API Key - placeholder: Input your ElevenLabs API key - placeholder_mobile: Elevenlabs API Key language: chinese: 简体中文 english: English title: Language microphone: Microphone models: Model - openai-api-key: - label: OpenAI API Key - placeholder: Input your API key - placeholder_mobile: OpenAI API Key - openai-base-url: - label: OpenAI API BaseURL - placeholder: Input your API base URL - placeholder_mobile: OpenAI API BaseURL - title: Settings - voices: Voice quit: Quit viewer: Viewer shortcuts: @@ -73,6 +59,210 @@ settings: debug: Toggle developer tools press_keys: Press keys... other: Other + pages: + models: + description: Live2D, VRM, etc. + title: Models + modules: + consciousness: + description: Personality, desired model, etc. + sections: + section: + provider-model-selection: + title: Model + description: Select the suitable LLM provider for consciousness + collapse: Collapse + custom_model_placeholder: Enter custom model name... + error: Error loading models + expand: Expand + loading: Loading available models... + manual_model_name: Model Name + manual_model_placeholder: Enter the model name to use with this provider + no_models: No models available + no_models_description: No models were found for this provider + no_search_results: No matching models + no_search_results_description: No models match '{query}'. Try a different search term. + not_supported: Model listing not supported + not_supported_description: This provider doesn't support model listing functionality + search_placeholder: Search models... + search_results: Found {count} of {total} models + show_less: Show less + show_more: Show more + subtitle: Select a model from the provider + title: Consciousness + description: Thinking, vision, speech synthesis, gaming, etc. + gaming-factorio: + description: Playing Factorio! + title: Factorio + gaming-minecraft: + description: Playing Minecraft! + title: Minecraft + hearing: + description: Configure how speech recognition works + title: Hearing + memory-long-term: + description: Long-term memory specific settings and management + title: Long-Term Memory + memory-short-term: + description: Short-term memory specific settings and management + title: Short-Term Memory + messaging-discord: + description: Chat & voice chat over Discord + title: Discord + speech: + description: Speech synthesis + title: Speech + title: Modules + vision: + description: Vision + title: Vision + providers: + common: + section: + advanced: + fields: + field: + headers: + description: Add custom HTTP headers + key: + placeholder: Key + label: HTTP Headers + value: + placeholder: Value + title: Advanced + basic: + description: Essential settings + title: Basic + voice: + title: Voice Settings + description: LLMs, speech providers, etc. + provider: + cloudflare-workers-ai: + description: cloudflare.com + fields: + field: + account-id: + description: Cloudflare Account ID + label: Account ID + placeholder: Your Cloudflare Account ID + api-key: + placeholder: Input Cloudflare Account ID + title: Cloudflare Workers AI + deepseek: + description: deepseek.com + title: DeepSeek + elevenlabs: + description: elevenlabs.io + fields: + field: + simularity-boost: + description: Voice similarity adherence + label: Similarity Boost + speaker-boost: + description: Enhance speaker similarity + label: Speaker Boost + speed: + description: Speech generation speed + label: Speed + stability: + description: Voice stability and randomness + label: Stability + style: + description: Voice style exaggeration + label: Style + playground: + buttons: + button: + test-voice: + generating: Generating... + label: Test Voice + fields: + field: + input: + placeholder: Enter text to test the voice... + language: + description: Select voice language + label: Language + voice: + description: Select preferred voice + label: Voice + title: Voice Playground + validation: + error-missing-api-key: Please enter an API key to test the voice. + title: ElevenLabs + fireworks: + description: fireworks.ai + title: Fireworks.ai + mistral: + description: mistral.ai + title: Mistral + moonshot: + description: moonshot.ai + title: Moonshot AI + novita: + description: novita.ai + title: Novita + ollama: + description: ollama.ai + title: Ollama + openai: + description: openai.com + title: OpenAI + openrouter: + description: openrouter.ai + title: OpenRouter + together: + description: together.ai + title: Together.ai + vllm: + description: vllm.ai + title: vLLM + xai: + description: x.ai + title: xAI + title: Providers + themes: + description: Customize your stage! + sections: + section: + custom-color: + fields: + field: + primary-color: + label: Primary color + reset: + label: Reset to Default + rgb-on: + title: I Want It Dynamic! + title: Custom Colors + theme-presets: + preset: + chinese: + description: >- + Traditional Chinese colors, derived from ancient textiles, + porcelain and paintings + title: Chinese Traditional Colors + japanese: + description: Traditional Japanese color palette + title: Japanese Colors + monet: + description: Impressionist palette inspired by Claude Monet\'s works + title: Monet Colors + morandi: + description: Soft, muted tones inspired by Giorgio Morandi\'s paintings + title: Morandi Colors + nordic: + description: Scandinavian minimalist color scheme + title: Nordic Colors + title: Theme Presets + title: Themes + sections: + section: + general: + title: General + theme: Theme + title: Settings + voices: Voice stage: chat: message: diff --git a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml b/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml index ac3408ac1..ae125121b 100644 --- a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml +++ b/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml @@ -31,25 +31,11 @@ prompt: 最后,做任何你想做的事! settings: - elevenlabs-api-key: - label: ElevenLabs API 密钥 - placeholder: 输入您的 ElevenLabs API 密钥 - placeholder_mobile: ElevenLabs API Key language: chinese: 简体中文 english: English title: 语言 models: 模型 - openai-api-key: - label: OpenAI API 密钥 - placeholder: 输入您的 API 密钥 - placeholder_mobile: OpenAI API Key - openai-base-url: - label: OpenAI API BaseURL - placeholder: 输入您的 API BaseURL - placeholder_mobile: OpenAI BaseURL - title: 设置 - voices: 声线 quit: 退出 viewer: 查看器 shortcuts: @@ -60,6 +46,203 @@ settings: debug: 切换开发者模式 press_keys: 按下快捷键... other: 其他 + pages: + models: + description: 切换角色的 Live2D,VRM 模型 + title: 角色模型 + modules: + consciousness: + description: 人格设定、使用的模型等配置 + title: 意识 + sections: + section: + provider-model-selection: + title: 模型 + description: 为意识选择合适的 LLM 提供商 + collapse: 折叠 + custom_model_placeholder: 输入自订模型名字 + error: 获取出错啦 + expand: 展开 + loading: 获取模型中... + manual_model_name: 模型名字 + manual_model_placeholder: 输入与该提供商一起使用的模型名字 + no_models: 没有任何可用的模型 + no_models_description: 该提供商的模型列表没有返回任何的数据 + no_search_results: 没有匹配的模型 + no_search_results_description: 没有模型匹配 '{query}' 关键字,请尝试一下别的关键词呢 + not_supported: 无法列出模型 + not_supported_description: 此提供商不支持列出模型的功能 + search_placeholder: 搜索模型... + search_results: 找到 {count} / {total} 个模型 + show_less: 显示更多 + show_more: 收起 + subtitle: 选择一个模型 + description: 思维,视觉,言语综合,游戏等 + gaming-factorio: + description: 一起玩 Factorio! + title: 异星工厂 Factorio + gaming-minecraft: + description: 一起 Minecraft! + title: 我的世界 Minecraft + hearing: + description: 语音识别 + title: 听觉 + memory-long-term: + description: 长期记忆 + title: 长期记忆 + memory-short-term: + description: 短期记忆 + title: 短期记忆 + messaging-discord: + description: Discord 发消息和语音聊天 + title: Discord + speech: + description: 语音合成 + title: 发声 + title: 机体模块 + vision: + description: 视觉 + title: 视觉 + providers: + common: + section: + advanced: + fields: + field: + headers: + description: 添加自定义HTTP标头 + key: + placeholder: 请求头名字 + label: HTTP 请求头 + value: + placeholder: 请求头数值 + title: 高级配置 + basic: + description: 基本设置 + title: 基础配置 + voice: + title: 声音配置 + description: LLM,演讲提供商等 + provider: + cloudflare-workers-ai: + description: Cloudflare.com + fields: + field: + account-id: + description: Cloudflare帐户ID + label: Cloudflare Account ID + placeholder: 请输入 Cloudflare Account ID + api-key: + placeholder: 请输入 Cloudflare Workers AI 的 API Key + title: Workers AI + deepseek: + description: DeepSeek.com + title: 深度求索 DeepSeek + elevenlabs: + description: Elevenlabs.io + fields: + field: + simularity-boost: + description: 声音相似性依从性 + label: 相似度修正 + speaker-boost: + description: 增强说话者的相似性 + label: 扬声器增强 + speed: + description: 语音生成速度 + label: 语速 + stability: + description: 语音稳定性和随机性 + label: 稳定性 + style: + description: 语音风格夸张 + label: 风格 + playground: + buttons: + button: + test-voice: + generating: 生成中... + label: 测试声音 + fields: + field: + input: + placeholder: 输入用于测试发音的文本 + language: + description: 选择语音语言 + label: 语言 + voice: + description: 选择首选语音 + label: 声线 + title: 调试场地 + validation: + error-missing-api-key: 需要填写 API Key 才能用哦! + title: ElevenLabs (11labs) + fireworks: + description: Fireworks.ai + title: Fireworks.ai + mistral: + description: mistral.ai + title: Mistral + moonshot: + description: Moonshot.ai + title: 月之暗面 + novita: + description: novita.ai + title: Novita + ollama: + description: ollama.ai + title: Ollama + openai: + description: OpenAi.com + title: OpenAI + openrouter: + description: OpenRouter.ai + title: OpenRouter + together: + description: 一起 + title: Together.ai + vllm: + description: vllm.ai + title: vLLM + xai: + description: X.AI + title: xAI + title: 提供商 + themes: + description: 自定义你的舞台外观! + sections: + section: + custom-color: + fields: + field: + primary-color: + label: 主题色 + reset: + label: 重设为默认主题色 + rgb-on: + title: RGB ON + title: 自定义主题色 + theme-presets: + preset: + chinese: + title: 中国传统颜色 + japanese: + title: 日本颜色 + monet: + title: 莫奈颜色 + morandi: + title: Morandi颜色 + nordic: + title: 北欧颜色 + title: 主题预设 + title: 舞台主题 + sections: + section: + general: + title: 通用 + theme: 主题颜色 + title: 设置 + voices: 声线 stage: message: 消息 select-a-audio-input: 选择一个音频输入设备 diff --git a/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue b/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue index 2fa1e949c..35d751467 100644 --- a/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue +++ b/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue @@ -4,9 +4,11 @@ import { useChatStore } from '@proj-airi/stage-ui/stores' import { useElementBounding, useScroll } from '@vueuse/core' import { storeToRefs } from 'pinia' import { nextTick, ref } from 'vue' +import { useI18n } from 'vue-i18n' const chatHistoryRef = ref() +const { t } = useI18n() const { messages, sending } = storeToRefs(useChatStore()) const bounding = useElementBounding(chatHistoryRef, { immediate: true, windowScroll: true, windowResize: true }) const { y: chatHistoryContainerY } = useScroll(chatHistoryRef) @@ -48,7 +50,7 @@ onTokenLiteral(async () => {
{{ - $t('stage.chat.message.character-name.core-system') }} + t('stage.chat.message.character-name.core-system') }}
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue index 000cd416c..add1c3ccc 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue @@ -30,7 +30,7 @@ function handleLanguageChange(event: Event) {

- Settings + {{ t('settings.title') }}

@@ -40,8 +40,8 @@ function handleLanguageChange(event: Event) { :initial="{ opacity: 0, y: 10 }" :enter="{ opacity: 1, y: 0 }" :duration="250" - title="Modules" - description="Thinking, vision, speech synthesis, gaming, etc." + :title="t('settings.pages.modules.title')" + :description="t('settings.pages.modules.description')" icon="i-lucide:blocks" to="/settings/modules" /> @@ -51,8 +51,8 @@ function handleLanguageChange(event: Event) { :enter="{ opacity: 1, y: 0 }" :duration="250" :delay="50" - title="Models" - description="Live2D, VRM, etc." + :title="t('settings.pages.models.title')" + :description="t('settings.pages.models.description')" icon="i-lucide:person-standing" to="/settings/models" /> @@ -62,8 +62,8 @@ function handleLanguageChange(event: Event) { :enter="{ opacity: 1, y: 0 }" :duration="250" :delay="100" - title="Providers" - description="LLMs, speech providers, etc." + :title="t('settings.pages.providers.title')" + :description="t('settings.pages.providers.description')" icon="i-lucide:brain" to="/settings/providers" /> @@ -73,8 +73,8 @@ function handleLanguageChange(event: Event) { :enter="{ opacity: 1, y: 0 }" :duration="250" :delay="150" - title="Themes" - description="Customize your stage!" + :title="t('settings.pages.themes.title')" + :description="t('settings.pages.themes.description')" icon="i-lucide:paintbrush" to="/settings/themes" /> @@ -87,7 +87,7 @@ function handleLanguageChange(event: Event) { :delay="150" >

- General + {{ t('settings.sections.section.general.title') }}

@@ -188,7 +188,7 @@ function handleLanguageChange(event: Event) { >
- Disable Transitions (for debugging) + {{ t('settings.animations.stage-transitions.title') }}
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue index 8a233b2c2..0f9142128 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue @@ -2,14 +2,39 @@ import Live2DCanvas from '@proj-airi/stage-ui/components/Live2D/Canvas.vue' import Live2DModel from '@proj-airi/stage-ui/components/Live2D/Model.vue' import { useElementBounding } from '@vueuse/core' +import { Vibrant } from 'node-vibrant/browser' import { ref } from 'vue' +import { useI18n } from 'vue-i18n' import { useRouter } from 'vue-router' import Live2DSettings from '../../../components/Widgets/Live2DSettings.vue' +const { t } = useI18n() const router = useRouter() const live2dContainerRef = ref() +const live2dCanvasRef = ref>() const { width, height } = useElementBounding(live2dContainerRef) + +const palette = ref([]) + +async function extractColorsFromModel() { + if (!live2dCanvasRef.value) + return + + const frame = await live2dCanvasRef.value.captureFrame() + if (!frame) { + console.error('No frame captured') + return + } + + const frameUrl = URL.createObjectURL(frame) + const vibrant = new Vibrant(frameUrl) + + const paletteFromVibrant = await vibrant.getPalette() + palette.value = Object.values(paletteFromVibrant).map(color => color?.hex).filter(it => typeof it === 'string') + + URL.revokeObjectURL(frameUrl) +} @@ -178,10 +180,10 @@ function updateCustomModelName(value: string) {

- {{ $t('settings.modules.consciousness.provider-model-selection.title') }} + {{ t('settings.pages.modules.consciousness.sections.section.provider-model-selection.title') }}

- {{ $t('settings.modules.consciousness.provider-model-selection.subtitle') }} + {{ t('settings.pages.modules.consciousness.sections.section.provider-model-selection.subtitle') }}
@@ -190,22 +192,22 @@ function updateCustomModelName(value: string) { >
- {{ $t('settings.modules.consciousness.provider-model-selection.not_supported') + {{ t('settings.pages.modules.consciousness.sections.section.provider-model-selection.not_supported') }} {{ - $t('settings.modules.consciousness.provider-model-selection.not_supported_description') }} + t('settings.pages.modules.consciousness.sections.section.provider-model-selection.not_supported_description') }}
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue index 23727c5b7..1c3a4d52e 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue @@ -1,9 +1,11 @@ @@ -49,50 +51,50 @@ const { live2dCurrentMotion } = storeToRefs(useSettings())
- {{ $t('stage.viewers.debug-menu.emotions') }} + {{ t('stage.viewers.debug-menu.emotions') }}
diff --git a/packages/stage-ui/src/components/Scenes/VRM.vue b/packages/stage-ui/src/components/Scenes/VRM.vue index 0b04437c3..c6ce7cd01 100644 --- a/packages/stage-ui/src/components/Scenes/VRM.vue +++ b/packages/stage-ui/src/components/Scenes/VRM.vue @@ -2,6 +2,7 @@ import { OrbitControls } from '@tresjs/cientos' import { TresCanvas } from '@tresjs/core' import { ref } from 'vue' +import { useI18n } from 'vue-i18n' import Collapsable from '../Collapsable.vue' import DataGuiRange from '../DataGui/Range.vue' @@ -33,6 +34,8 @@ const modelRef = ref<{ setExpression: (expression: string) => void }>() +const { t } = useI18n() + defineExpose({ setExpression: (expression: string) => { modelRef.value?.setExpression(expression) @@ -82,11 +85,11 @@ defineExpose({
- {{ $t('stage.viewers.debug-menu.vrm.model.title') }} + {{ t('stage.viewers.debug-menu.vrm.model.title') }}
@@ -122,7 +125,7 @@ defineExpose({
@@ -158,38 +161,38 @@ defineExpose({
- {{ $t('stage.viewers.debug-menu.emotions') }} + {{ t('stage.viewers.debug-menu.emotions') }}
diff --git a/packages/stage-ui/src/stores/providers.ts b/packages/stage-ui/src/stores/providers.ts index 14f048d06..ffb737f8f 100644 --- a/packages/stage-ui/src/stores/providers.ts +++ b/packages/stage-ui/src/stores/providers.ts @@ -118,9 +118,9 @@ export const useProvidersStore = defineStore('providers', () => { const providerMetadata: Record = { 'openrouter-ai': { id: 'openrouter-ai', - nameKey: 'providers.openrouter.name', + nameKey: 'settings.pages.providers.provider.openrouter.title', name: 'OpenRouter', - descriptionKey: 'providers.openrouter.description', + descriptionKey: 'settings.pages.providers.provider.openrouter.description', description: 'openrouter.ai', icon: 'i-lobe-icons:openrouter', defaultOptions: { @@ -135,9 +135,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'openai': { id: 'openai', - nameKey: 'providers.openai.name', + nameKey: 'settings.pages.providers.provider.openai.title', name: 'OpenAI', - descriptionKey: 'providers.openai.description', + descriptionKey: 'settings.pages.providers.provider.openai.description', description: 'openai.com', icon: 'i-lobe-icons:openai', defaultOptions: { @@ -163,9 +163,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'ollama': { id: 'ollama', - nameKey: 'providers.ollama.name', + nameKey: 'settings.pages.providers.provider.ollama.title', name: 'Ollama', - descriptionKey: 'providers.ollama.description', + descriptionKey: 'settings.pages.providers.provider.ollama.description', description: 'ollama.com', icon: 'i-lobe-icons:ollama', defaultOptions: { @@ -191,9 +191,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'vllm': { id: 'vllm', - nameKey: 'providers.vllm.name', + nameKey: 'settings.pages.providers.provider.vllm.title', name: 'vLLM', - descriptionKey: 'providers.vllm.description', + descriptionKey: 'settings.pages.providers.provider.vllm.description', description: 'vllm.ai', iconColor: 'i-lobe-icons:vllm-color', createProvider: config => createOllama(config.baseUrl as string), @@ -248,9 +248,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'perplexity-ai': { id: 'perplexity-ai', - nameKey: 'providers.perplexity.name', + nameKey: 'settings.pages.providers.provider.perplexity.title', name: 'Perplexity', - descriptionKey: 'providers.perplexity.description', + descriptionKey: 'settings.pages.providers.provider.perplexity.description', description: 'perplexity.ai', icon: 'i-lobe-icons:perplexity', defaultOptions: { @@ -301,9 +301,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'elevenlabs': { id: 'elevenlabs', - nameKey: 'providers.elevenlabs.name', + nameKey: 'settings.pages.providers.provider.elevenlabs.title', name: 'ElevenLabs', - descriptionKey: 'providers.elevenlabs.description', + descriptionKey: 'settings.pages.providers.provider.elevenlabs.description', description: 'elevenlabs.io', icon: 'i-simple-icons:elevenlabs', defaultOptions: { @@ -338,9 +338,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'xai': { id: 'xai', - nameKey: 'providers.xai.name', + nameKey: 'settings.pages.providers.provider.xai.title', name: 'xAI', - descriptionKey: 'providers.xai.description', + descriptionKey: 'settings.pages.providers.provider.xai.description', description: 'x.ai', icon: 'i-lobe-icons:xai', createProvider: config => createXAI(config.apiKey as string, config.baseUrl as string), @@ -363,9 +363,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'deepseek': { id: 'deepseek', - nameKey: 'providers.deepseek.name', + nameKey: 'settings.pages.providers.provider.deepseek.title', name: 'DeepSeek', - descriptionKey: 'providers.deepseek.description', + descriptionKey: 'settings.pages.providers.provider.deepseek.description', description: 'deepseek.com', iconColor: 'i-lobe-icons:deepseek-color', createProvider: config => createDeepSeek(config.apiKey as string, config.baseUrl as string), @@ -388,9 +388,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'together-ai': { id: 'together-ai', - nameKey: 'providers.together.name', + nameKey: 'settings.pages.providers.provider.together.title', name: 'Together.ai', - descriptionKey: 'providers.together.description', + descriptionKey: 'settings.pages.providers.provider.together.description', description: 'together.ai', iconColor: 'i-lobe-icons:together-color', createProvider: config => createTogetherAI(config.apiKey as string, config.baseUrl as string), @@ -413,9 +413,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'novita-ai': { id: 'novita-ai', - nameKey: 'providers.novita.name', + nameKey: 'settings.pages.providers.provider.novita.title', name: 'Novita', - descriptionKey: 'providers.novita.description', + descriptionKey: 'settings.pages.providers.provider.novita.description', description: 'novita.ai', iconColor: 'i-lobe-icons:novita-color', createProvider: config => createNovita(config.apiKey as string, config.baseUrl as string), @@ -438,9 +438,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'fireworks-ai': { id: 'fireworks-ai', - nameKey: 'providers.fireworks.name', + nameKey: 'settings.pages.providers.provider.fireworks.title', name: 'Fireworks.ai', - descriptionKey: 'providers.fireworks.description', + descriptionKey: 'settings.pages.providers.provider.fireworks.description', description: 'fireworks.ai', icon: 'i-lobe-icons:fireworks', createProvider: config => createFireworks(config.apiKey as string, config.baseUrl as string), @@ -463,9 +463,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'cloudflare-workers-ai': { id: 'cloudflare-workers-ai', - nameKey: 'providers.cloudflare.name', + nameKey: 'settings.pages.providers.provider.cloudflare-workers-ai.title', name: 'Cloudflare Workers AI', - descriptionKey: 'providers.cloudflare.description', + descriptionKey: 'settings.pages.providers.provider.cloudflare-workers-ai.description', description: 'cloudflare.com', iconColor: 'i-lobe-icons:cloudflare-color', createProvider: config => createWorkersAI(config.apiKey as string, config.accountId as string), @@ -477,9 +477,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'mistral-ai': { id: 'mistral-ai', - nameKey: 'providers.mistral.name', + nameKey: 'settings.pages.providers.provider.mistral.title', name: 'Mistral', - descriptionKey: 'providers.mistral.description', + descriptionKey: 'settings.pages.providers.provider.mistral.description', description: 'mistral.ai', iconColor: 'i-lobe-icons:mistral-color', createProvider: config => createMistral(config.apiKey as string, config.baseUrl as string), @@ -502,9 +502,9 @@ export const useProvidersStore = defineStore('providers', () => { }, 'moonshot-ai': { id: 'moonshot-ai', - nameKey: 'providers.moonshot.name', + nameKey: 'settings.pages.providers.provider.moonshot.title', name: 'Moonshot AI', - descriptionKey: 'providers.moonshot.description', + descriptionKey: 'settings.pages.providers.provider.moonshot.description', description: 'moonshot.ai', icon: 'i-lobe-icons:moonshot', createProvider: config => createMoonshot(config.apiKey as string, config.baseUrl as string), diff --git a/packages/stage-ui/src/stores/settings.ts b/packages/stage-ui/src/stores/settings.ts index 99872d162..f5b9fe9d7 100644 --- a/packages/stage-ui/src/stores/settings.ts +++ b/packages/stage-ui/src/stores/settings.ts @@ -24,7 +24,7 @@ export const useSettings = defineStore('settings', () => { const availableLive2dMotions = ref<{ motionName: string, motionIndex: number, fileName: string }[]>([]) const live2dMotionMap = useLocalStorage>('settings/live2d/motion-map', {}) - const disableTransitions = useLocalStorage('settings/disable-transitions', false) + const disableTransitions = useLocalStorage('settings/disable-transitions', true) const themeColorsHue = useLocalStorage('settings/theme/colors/hue', DEFAULT_THEME_COLORS_HUE) const themeColorsHueDynamic = useLocalStorage('settings/theme/colors/hue-dynamic', false)