diff --git a/src/components/Settings/TTSSettings.tsx b/src/components/Settings/TTSSettings.tsx index b8bb6bc0..f4f23299 100644 --- a/src/components/Settings/TTSSettings.tsx +++ b/src/components/Settings/TTSSettings.tsx @@ -45,11 +45,29 @@ const TTSSettings: React.FC = ({ settings, onUpdate }) => {
diff --git a/src/components/TTSControls.tsx b/src/components/TTSControls.tsx index 305d5753..c0921b62 100644 --- a/src/components/TTSControls.tsx +++ b/src/components/TTSControls.tsx @@ -37,12 +37,25 @@ const TTSControls: React.FC = ({ text, defaultLang, className, settings } return settings?.ttsDetectContentLanguage !== false }, [settings?.ttsLanguageMode, settings?.ttsDetectContentLanguage]) + const specificLang = useMemo(() => { + const mode = settings?.ttsLanguageMode + // If mode is not 'system' or 'content', it's a specific language code + if (mode && mode !== 'system' && mode !== 'content') { + return mode + } + return undefined + }, [settings?.ttsLanguageMode]) + const handlePlayPause = () => { if (!canPlay) return if (!speaking) { let langOverride: string | undefined - if (detectContentLang && text) { + + // Priority: specific language > content detection > system language + if (specificLang) { + langOverride = specificLang + } else if (detectContentLang && text) { try { const lang = detect(text) if (typeof lang === 'string' && lang.length >= 2) langOverride = lang.slice(0, 2) diff --git a/src/services/settingsService.ts b/src/services/settingsService.ts index 7a08ca9e..25df6938 100644 --- a/src/services/settingsService.ts +++ b/src/services/settingsService.ts @@ -68,7 +68,7 @@ export interface UserSettings { // TTS language selection ttsUseSystemLanguage?: boolean // default: false ttsDetectContentLanguage?: boolean // default: true - ttsLanguageMode?: 'system' | 'content' // default: 'content' + ttsLanguageMode?: 'system' | 'content' | string // default: 'content', can also be language code like 'en', 'es', etc. // Text-to-Speech settings ttsDefaultSpeed?: number // default: 2.1 }