diff --git a/src/components/landing/layout/footer/language-picker.tsx b/src/components/landing/layout/footer/language-picker.tsx index 212b384a1..af8fedf09 100644 --- a/src/components/landing/layout/footer/language-picker.tsx +++ b/src/components/landing/layout/footer/language-picker.tsx @@ -1,62 +1,69 @@ import moment from 'moment' -import React from 'react' +import React, { useCallback } from 'react' import { Form } from 'react-bootstrap' import { useTranslation } from 'react-i18next' +const languages = { + en: 'English', + 'zh-CN': '简体中文', + 'zh-TW': '繁體中文', + fr: 'Français', + de: 'Deutsch', + ja: '日本語', + es: 'Español', + ca: 'Català', + el: 'Ελληνικά', + pt: 'Português', + it: 'Italiano', + tr: 'Türkçe', + ru: 'Русский', + nl: 'Nederlands', + hr: 'Hrvatski', + pl: 'Polski', + uk: 'Українська', + hi: 'हिन्दी', + sv: 'Svenska', + eo: 'Esperanto', + da: 'Dansk', + ko: '한국어', + id: 'Bahasa Indonesia', + sr: 'Cрпски', + vi: 'Tiếng Việt', + ar: 'العربية', + cs: 'Česky', + sk: 'Slovensky' +} + +const findLanguageCode = (wantedLanguage: string): string => { + let foundLanguage = Object.keys(languages).find((supportedLanguage) => wantedLanguage === supportedLanguage) + if (!foundLanguage) { + foundLanguage = Object.keys(languages).find((supportedLanguage) => wantedLanguage.substr(0, 2) === supportedLanguage) + } + return foundLanguage || '' +} + const LanguagePicker: React.FC = () => { const { i18n } = useTranslation() - const onChangeLang = async (event: React.ChangeEvent) => { + const onChangeLang = useCallback(() => async (event: React.ChangeEvent) => { const language = event.currentTarget.value moment.locale(language) await i18n.changeLanguage(language) - } - - const shortenLanguageCode = (language: string): string => { - const languageWithoutArea = language.substr(0, 2) - if (languageWithoutArea === 'zh') { - return language - } else { - return languageWithoutArea - } - } + }, [i18n]) return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - + { + Object.entries(languages).map(([language, languageName]) => { + return + }) + } ) }