This is amazing! Consider potentially adding support for WebSpeech api to make it easier. Something like
const voice = speechSynthesis.getVoices().filter(e => e.lang==='zh-HK').at(-1)
const utterance = new SpeechSynthesisUtterance('你好')
utterance.voice = voice
speechSynthesis.speak(utterance)