feat(voices): LanguageControl 支持根据音色来源过滤可选语言

This commit is contained in:
2026-09-15 01:09:30 +08:00
parent 7609a54206
commit 1b50ded3d1
@@ -1,13 +1,28 @@
import React from "react"
import { TTS_LANGUAGE_OPTIONS, type TtsLanguage } from "./constants"
import type { TtsLanguage } from "./constants"
import { TTS_LANGUAGE_OPTIONS } from "./constants"
interface LanguageOption {
value: string
label: string
}
interface LanguageControlProps {
language: TtsLanguage
onChange: (language: TtsLanguage) => void
/** 根据音色来源传入可选语言列表;不传则使用完整列表 */
options?: readonly LanguageOption[]
}
/** 语言选择下拉 */
const LanguageControl: React.FC<LanguageControlProps> = ({ language, onChange }) => {
const LanguageControl: React.FC<LanguageControlProps> = ({
language,
onChange,
options = TTS_LANGUAGE_OPTIONS,
}) => {
// 若当前语言不在可选列表(如从克隆切到预置时 ja/ko 失效),自动回退到中文
const effectiveValue = options.some((o) => o.value === language) ? language : "zh-CN"
return (
<div>
<div
@@ -20,7 +35,7 @@ const LanguageControl: React.FC<LanguageControlProps> = ({ language, onChange })
语言
</div>
<select
value={language}
value={effectiveValue}
onChange={(e) => onChange(e.target.value as TtsLanguage)}
style={{
width: "100%",
@@ -34,7 +49,7 @@ const LanguageControl: React.FC<LanguageControlProps> = ({ language, onChange })
cursor: "pointer",
}}
>
{TTS_LANGUAGE_OPTIONS.map((opt) => (
{options.map((opt) => (
<option key={opt.value} value={opt.value}>
{opt.label}
</option>