From 9cbc17395b1ae5c0a1eec44570ee91d1e7450315 Mon Sep 17 00:00:00 2001 From: Colby Fayock Date: Wed, 28 Feb 2024 22:07:20 -0500 Subject: [PATCH] Step 5: Showing a friendly list of languages --- src/components/Translator.tsx | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/components/Translator.tsx b/src/components/Translator.tsx index ecca7a0..0d2d556 100644 --- a/src/components/Translator.tsx +++ b/src/components/Translator.tsx @@ -2,6 +2,12 @@ import { useState, useEffect } from 'react'; +import { default as languageCodesData } from '@/data/language-codes.json'; +import { default as countryCodesData } from '@/data/country-codes.json'; + +const languageCodes: Record = languageCodesData; +const countryCodes: Record = countryCodesData; + const Translator = () => { const [text, setText] = useState(); const [translation, setTranslation] = useState(); @@ -11,7 +17,19 @@ const Translator = () => { const isActive = false; const isSpeechDetected = false; - const availableLanguages = Array.from(new Set(voices?.map(({ lang }) => lang))).sort(); + const availableLanguages = Array.from(new Set(voices?.map(({ lang }) => lang))) + .map(lang => { + const split = lang.split('-'); + const languageCode: string = split[0]; + const countryCode: string = split[1]; + return { + lang, + label: languageCodes[languageCode] || lang, + dialect: countryCodes[countryCode] + } + }) + .sort((a, b) => a.label.localeCompare(b.label)); + const availableVoices = voices?.filter(({ lang }) => lang === language); const activeVoice = availableVoices?.find(({ name }) => name.includes('Google')) @@ -97,10 +115,10 @@ const Translator = () => {