import { ref } from 'vue'; import { defineStore } from 'pinia'; import { useLocalStorage } from '@vueuse/core'; export interface Language { displayName: string; // UI 显示的中文名,如 "英语(英国)" englishName: string; // 文件中的第二列,用于 {SOURCE_LANG} code: string; // 文件中的第一列,用于 {SOURCE_CODE} } export const LANGUAGES: Language[] = [ { displayName: '中文(简体)', englishName: 'Simplified Chinese', code: 'zh-Hans' }, { displayName: '中文(繁体)', englishName: 'Traditional Chinese', code: 'zh-Hant' }, { displayName: '英语', englishName: 'English', code: 'en' }, { displayName: '日语', englishName: 'Japanese', code: 'ja' }, { displayName: '韩语', englishName: 'Korean', code: 'ko' }, { displayName: '法语', englishName: 'French', code: 'fr' }, { displayName: '德语', englishName: 'German', code: 'de' }, { displayName: '西班牙语', englishName: 'Spanish', code: 'es' }, { displayName: '意大利语', englishName: 'Italian', code: 'it' }, { displayName: '俄语', englishName: 'Russian', code: 'ru' }, { displayName: '葡萄牙语', englishName: 'Portuguese', code: 'pt' }, { displayName: '越南语', englishName: 'Vietnamese', code: 'vi' }, { displayName: '泰语', englishName: 'Thai', code: 'th' }, { displayName: '阿拉伯语', englishName: 'Arabic', code: 'ar' }, ]; export const DEFAULT_TEMPLATE = `You are a professional {SOURCE_LANG} ({SOURCE_CODE}) to {TARGET_LANG} ({TARGET_CODE}) translator. Your goal is to accurately convey the meaning and nuances of the original {SOURCE_LANG} text while adhering to {TARGET_LANG} grammar, vocabulary, and cultural sensitivities. Produce only the {TARGET_LANG} translation, without any additional explanations or commentary. Please translate the following {SOURCE_LANG} text into {TARGET_LANG}: {TEXT}`; export const useSettingsStore = defineStore('settings', () => { const ollamaApiAddress = useLocalStorage('ollama-api-address', 'http://localhost:11434'); const modelName = useLocalStorage('model-name', 'translategemma:12b'); const enableStreaming = useLocalStorage('enable-streaming', true); const systemPromptTemplate = useLocalStorage('system-prompt-template', DEFAULT_TEMPLATE); // 存储整个对象以保持一致性 const sourceLang = useLocalStorage('source-lang-v2', LANGUAGES[0]); const targetLang = useLocalStorage('target-lang-v2', LANGUAGES[4]); const logs = ref<{ timestamp: string; type: 'request' | 'response' | 'error'; content: any }[]>([]); const addLog = (type: 'request' | 'response' | 'error', content: any) => { const now = new Date(); const timestamp = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`; logs.value.unshift({ timestamp, type, content }); if (logs.value.length > 20) logs.value.pop(); }; return { ollamaApiAddress, modelName, enableStreaming, systemPromptTemplate, sourceLang, targetLang, logs, addLog }; });