From e2b15f785a1ea542c444c8f67c3497fba3cd3a9a Mon Sep 17 00:00:00 2001 From: Fred Date: Mon, 18 Mar 2024 17:52:34 +0800 Subject: [PATCH] feat: update voice input button --- app/components/chat.tsx | 5 +- app/components/chat/speechRecorder.tsx | 64 ++++++++++++++++---------- app/icons/voice.svg | 11 +++++ app/locales/index.ts | 29 ++++++++++++ 4 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 app/icons/voice.svg diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 7ec5f5dec..368144603 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -1477,8 +1477,11 @@ function _Chat() { })} )} -
+
+
+ +
} text={Locale.Chat.Send} diff --git a/app/components/chat/speechRecorder.tsx b/app/components/chat/speechRecorder.tsx index 9cc810bfd..33801b323 100644 --- a/app/components/chat/speechRecorder.tsx +++ b/app/components/chat/speechRecorder.tsx @@ -1,5 +1,6 @@ import React, { useState, useEffect } from "react"; - +import VoiceIcon from "@/app/icons/voice.svg"; +import { getLang, formatLang } from "@/app/locales"; type SpeechRecognitionType = | typeof window.SpeechRecognition | typeof window.webkitSpeechRecognition; @@ -22,29 +23,42 @@ export default function SpeechRecorder({ } }, []); return ( -
- -
+ <> + {speechRecognition && ( +
+ + ) : ( + + )} + +
+ )} + ); } diff --git a/app/icons/voice.svg b/app/icons/voice.svg new file mode 100644 index 000000000..eafcdd907 --- /dev/null +++ b/app/icons/voice.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/locales/index.ts b/app/locales/index.ts index 6e8088a98..336c8e66f 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -70,6 +70,28 @@ export const ALL_LANG_OPTIONS: Record = { sk: "Slovensky", }; +const LANG_CODE_MAPPING = { + cn: "zh-CN", + en: "en-US", + tw: "zh-TW", + pt: "pt-BR", + jp: "ja-JP", + ko: "ko-KR", + id: "id-ID", + fr: "fr-FR", + es: "es-ES", + it: "it-IT", + tr: "tr-TR", + de: "de-DE", + vi: "vi-VN", + ru: "ru-RU", + cs: "cs-CZ", + no: "nb-NO", + ar: "ar-SA", + bn: "bn-BD", + sk: "sk-SK", +}; + const LANG_KEY = "lang"; const DEFAULT_LANG = "en"; @@ -81,6 +103,13 @@ merge(fallbackLang, targetLang); export default fallbackLang as LocaleType; +export const formatLang = (languageCode: string) => { + return ( + LANG_CODE_MAPPING[languageCode as keyof typeof LANG_CODE_MAPPING] || + languageCode + ); +}; + function getItem(key: string) { try { return localStorage.getItem(key);