feat(voices): LanguageControl 支持根据音色来源过滤可选语言
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user