@google-translate-select/react
Version:
🚀 The package offer react library for @google-translate-select!
1 lines • 21.6 kB
Source Map (JSON)
{"version":3,"file":"index2.mjs","sources":["../../src/google-translate-select.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react'\nimport cs from 'classnames'\nimport {\n GOOGLE_TRANSLATE_COOKIE_NAME,\n GOOGLE_TRANSLATE_JSSDK_URL,\n GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME,\n GOOGLE_TRANSLATE_SELECT_LANGUAGES,\n GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n} from '@google-translate-select/constants'\nimport {\n GoogleTranslateFireEvent,\n createGoogleTranslateJsonpCallback,\n createNamespace,\n createScriptTag,\n createStyleTag,\n getCookie,\n isString,\n removeIcon,\n useMutationObserver,\n} from '@google-translate-select/utils'\nimport '@google-translate-select/theme-chalk/src/index.scss'\nimport type { UseMutationObserverReturn } from '@google-translate-select/utils'\nimport type { IGoogleTranslateProps } from './types/props'\n\nconst ns = createNamespace('select')\n\nexport default function GoogleTranslateSelect(props: IGoogleTranslateProps) {\n const {\n languages = GOOGLE_TRANSLATE_SELECT_LANGUAGES,\n defaultLanguageCode = 'en',\n defaultPageLanguageCode = 'en',\n fetchBrowserLanguage = true,\n animateTimeout = 150,\n dropdownClassName = '',\n dropdownStyles = {},\n showArrow = true,\n trigger = 'hover',\n className = '',\n select,\n } = props\n\n const [visible, setVisible] = useState<boolean>(false)\n const [selectedLanguageCode, changeSelectedLanguageCode] =\n useState<string>('')\n const [jsonCallbackFnName, setJsonCallbackFnName] = useState<string>('')\n const [\n googleTranslateOriginSelectObserve,\n setGoogleTranslateOriginSelectObserve,\n ] = useState<Partial<UseMutationObserverReturn> | null>({})\n const [htmlAttrLangObserve, setHtmlAttrLangObserve] =\n useState<Partial<UseMutationObserverReturn> | null>({})\n const [flag, setFlag] = useState<boolean>(true)\n const [timeoutId, setTimeoutId] = useState<number>(-1)\n\n /**\n * get current select language\n */\n const getSelectedLanguageOption = (code: string) => {\n const selectedLanguageObject = languages.find(\n (language) => language.code === code\n )\n const defaultSelectedLanguageObject = languages.find(\n (language) => language.code === defaultLanguageCode\n )\n\n return selectedLanguageObject\n ? selectedLanguageObject\n : defaultSelectedLanguageObject\n }\n\n const selectedLanguageOption = useMemo(\n () => getSelectedLanguageOption(selectedLanguageCode),\n [selectedLanguageCode]\n )\n\n useEffect(() => {\n createGoogleTranslate()\n createHtmlAttrLangObserve()\n }, [])\n\n useEffect(() => {\n createScript()\n }, [jsonCallbackFnName])\n\n useEffect(() => {\n if (htmlAttrLangObserve?.start) {\n htmlAttrLangObserve.start()\n }\n return () => {\n if (htmlAttrLangObserve?.stop) {\n htmlAttrLangObserve.stop()\n }\n }\n }, [htmlAttrLangObserve])\n\n useEffect(() => {\n if (googleTranslateOriginSelectObserve?.start) {\n googleTranslateOriginSelectObserve.start()\n }\n return () => {\n if (googleTranslateOriginSelectObserve?.stop) {\n googleTranslateOriginSelectObserve.stop()\n }\n }\n }, [googleTranslateOriginSelectObserve])\n\n useEffect(() => {\n if (googleTranslateOriginSelectObserve?.stop) {\n googleTranslateOriginSelectObserve!.stop!()\n }\n }, [flag])\n\n /**\n * When GoogleTranslate's original executes, the attribute 'lang' of HTML will have an auto state,\n * in order to overwrite the auto state, we call the 'handleTranslate' again\n */\n const createHtmlAttrLangObserve = () => {\n const observer = useMutationObserver(\n document.querySelector('html')!,\n (records) => {\n records.forEach((record) => {\n if (record.attributeName === 'lang') {\n const currentValue = (record.target as HTMLElement).getAttribute(\n 'lang'\n )\n const oldValue = record.oldValue\n // 修复auto的中间状态,如果页面当中内容较多,gt会有一个翻译的过程,就会抛出lang = auto,此时我们手动再触发一次翻译覆盖掉上次未进行完的翻译操作\n if (\n oldValue !== currentValue &&\n oldValue &&\n oldValue !== 'auto' &&\n currentValue === 'auto'\n ) {\n handleTranslate(selectedLanguageCode)\n }\n }\n })\n removeIcon()\n },\n {\n attributes: true,\n attributeOldValue: true,\n }\n )\n setHtmlAttrLangObserve(observer)\n }\n\n /**\n * GoogleTranslate init\n */\n const createGoogleTranslate = () => {\n createStyle()\n createJsonCallback()\n }\n\n /**\n * pass jsonp callback to GoogleTranslate\n */\n const createScript = () => {\n if (!jsonCallbackFnName) {\n return null\n }\n\n return createScriptTag(\n `${GOOGLE_TRANSLATE_JSSDK_URL}?cb=${jsonCallbackFnName}`\n )\n }\n\n /**\n * create jsonp callback for GoogleTranslate, when GoogleTranslate loaded callback will be triggered\n */\n const createJsonCallback = () => {\n const { jsonpCallbackName } = createGoogleTranslateJsonpCallback(\n {\n pageLanguage: defaultPageLanguageCode,\n },\n setSelectedLanguageCode\n )\n setJsonCallbackFnName(jsonpCallbackName)\n }\n\n /**\n * Use browser language、cookie 'googtrans' to get language code\n */\n const setSelectedLanguageCode = () => {\n const googleCookieLanguage = getGoogleCookieLanguage()\n const browserLanguage = fetchBrowserLanguage\n ? isLanguageCodeInLanguages(getBrowserLanguage())\n : ''\n const isGoogleCookieLanguageExist = !!googleCookieLanguage\n const isFetchBrowserLanguageOpen = fetchBrowserLanguage\n const defaultSelectedCode = defaultLanguageCode || 'en'\n\n const handleLanguageInLanguages = (code: string) => {\n const isLanguageInLanguages = !!languages.find(\n (language) => language.code === code\n )\n return isLanguageInLanguages ? code : defaultSelectedCode\n }\n let selectedCode = defaultSelectedCode\n if (!isGoogleCookieLanguageExist && isFetchBrowserLanguageOpen) {\n selectedCode = handleLanguageInLanguages(browserLanguage)\n } else {\n selectedCode = handleLanguageInLanguages(googleCookieLanguage)\n }\n\n handleTranslate(selectedCode)\n }\n\n /**\n * Get browser language\n */\n function getBrowserLanguage() {\n const browserLanguage =\n window.navigator.language || document.documentElement.lang || 'en'\n\n const filterLanguages = ['zh-CN', 'zh-TW']\n if (filterLanguages.every((l) => l !== browserLanguage)) {\n if (browserLanguage.indexOf('-') > -1) {\n return browserLanguage.split('-')[0]\n }\n }\n return browserLanguage\n }\n\n /**\n * Determines whether the current select language exists in the props.languages\n *\n * @param code\n */\n function isLanguageCodeInLanguages(code: string) {\n // 如果 code 不存在于语言列表中默认使用英语\n const result = languages.find((language) => language.code === code)\n return result ? code : 'en'\n }\n\n /**\n * After triggering GoogleTranslate Translate, a cookie called 'googtrans' is generated, such as '/en/tr'\n */\n const getGoogleCookieLanguage = () => {\n const googleTranslateCookie = getCookie(GOOGLE_TRANSLATE_COOKIE_NAME)\n if (googleTranslateCookie) {\n const googleTranslateCookieResult = googleTranslateCookie.split('/')\n return googleTranslateCookieResult[2]\n ? googleTranslateCookieResult[2]\n : 'en'\n } else {\n return ''\n }\n }\n\n /**\n * dynamic insert style for GoogleTranslate\n */\n const createStyle = () => {\n return createStyleTag(\n `body { top: 0 !important; } .skiptranslate { display: none !important; }`\n )\n }\n\n const handleDropdownShow = () => {\n if (trigger === 'hover') {\n clearTimeout(timeoutId)\n setTimeoutId(\n window.setTimeout(() => {\n setVisible(true)\n }, animateTimeout)\n )\n }\n }\n\n const handleDropdownHide = () => {\n if (trigger === 'hover') {\n clearTimeout(timeoutId)\n setTimeoutId(\n window.setTimeout(() => {\n setVisible(false)\n }, animateTimeout)\n )\n }\n }\n\n /**\n * Triggers translations by observe changes in the DOM of GoogleTranslate's original select.\n *\n * Because the callback function passed in JSONP can only be called after the GOOGLE_TRANSLATE_JSSDK_URL resource is loaded,\n * and the GOOGLE_TRANSLATE_JSSDK_URL will import the resource that generated the original DOM, observe is used here🤓\n */\n const createGoogleTranslateOriginSelectObserve = (code: string) => {\n const observe = useMutationObserver(\n document.querySelector(GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME)!,\n (records) => {\n records.forEach((record) => {\n if (\n record.addedNodes[0] &&\n (record.addedNodes[0] as HTMLOptionElement).value\n ) {\n if (code === (record.addedNodes[0] as HTMLOptionElement).value) {\n triggerTranslate(\n (record.addedNodes[0] as HTMLOptionElement).value\n )\n }\n }\n })\n },\n {\n childList: true,\n subtree: true,\n }\n )\n setGoogleTranslateOriginSelectObserve(observe)\n }\n\n const triggerTranslate = (select: HTMLSelectElement | string) => {\n if (!select) {\n return\n }\n const selectValue = isString(select) ? select : select.value ?? ''\n const googleTranslateOriginalSelectEl = document.querySelector(\n GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME\n ) as HTMLSelectElement | null\n const googleTranslateSelectEl = document.querySelector(`.${ns.b()}`)\n\n if (\n !googleTranslateSelectEl ||\n !googleTranslateOriginalSelectEl ||\n googleTranslateSelectEl.innerHTML.length === 0 ||\n googleTranslateOriginalSelectEl.options.length === 0\n ) {\n createGoogleTranslateOriginSelectObserve(selectValue)\n } else {\n googleTranslateOriginalSelectEl.value = selectValue\n GoogleTranslateFireEvent(googleTranslateOriginalSelectEl, 'change')\n setFlag(!flag)\n }\n }\n\n const handleTranslate = (code: string) => {\n triggerTranslate(code)\n changeSelectedLanguageCode(code)\n select && select(getSelectedLanguageOption(code))\n }\n\n const handleDropdownByClick = () => {\n if (trigger === 'click') {\n setVisible((value) => !value)\n }\n }\n\n if (!languages || !languages.length) {\n return null\n }\n\n return (\n <>\n <div\n className={cs([\n ns.b(),\n GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n className,\n ])}\n >\n <div className={ns.b('dropdown')}>\n <div\n className={ns.be('dropdown', 'activator')}\n onMouseEnter={handleDropdownShow}\n onMouseLeave={handleDropdownHide}\n onClick={handleDropdownByClick}\n >\n <div className={ns.b('language')}>\n <div className={ns.b('flag')}>\n <div className={ns.be('flag', selectedLanguageOption?.code)} />\n </div>\n {selectedLanguageOption?.name}\n </div>\n {showArrow && (\n <div\n className={cs([ns.b('icon'), visible ? ns.is('reverse') : ''])}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n fill=\"currentColor\"\n d=\"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z\"\n />\n </svg>\n </div>\n )}\n </div>\n <div\n className={cs([ns.be('dropdown', 'menu'), dropdownClassName])}\n style={{ display: visible ? '' : 'none', ...dropdownStyles }}\n onMouseEnter={handleDropdownShow}\n onMouseLeave={handleDropdownHide}\n onClick={handleDropdownByClick}\n >\n <ul>\n {languages.map((language) => {\n return (\n <li\n key={`language-${language.code}`}\n className={cs([\n ns.be('dropdown', 'menu__item'),\n selectedLanguageCode === language.code ? 'selected' : '',\n ])}\n data-language-code={language.code}\n onClick={() => {\n handleTranslate(language.code)\n }}\n >\n <div className={ns.b('language')}>\n <div className={ns.b('flag')}>\n <div className={ns.be('flag', language.code)}></div>\n </div>\n {language.name}\n </div>\n </li>\n )\n })}\n </ul>\n </div>\n </div>\n </div>\n <div id={GOOGLE_TRANSLATE_ORIGINAL_DOM_ID} />\n </>\n )\n}\n"],"names":["ns","createNamespace","GoogleTranslateSelect","props","languages","GOOGLE_TRANSLATE_SELECT_LANGUAGES","defaultLanguageCode","defaultPageLanguageCode","fetchBrowserLanguage","animateTimeout","dropdownClassName","dropdownStyles","showArrow","trigger","className","select","visible","setVisible","useState","selectedLanguageCode","changeSelectedLanguageCode","jsonCallbackFnName","setJsonCallbackFnName","googleTranslateOriginSelectObserve","setGoogleTranslateOriginSelectObserve","htmlAttrLangObserve","setHtmlAttrLangObserve","flag","setFlag","timeoutId","setTimeoutId","getSelectedLanguageOption","code","selectedLanguageObject","language","defaultSelectedLanguageObject","selectedLanguageOption","useMemo","useEffect","createGoogleTranslate","createHtmlAttrLangObserve","createScript","observer","useMutationObserver","records","record","currentValue","oldValue","handleTranslate","removeIcon","createStyle","createJsonCallback","createScriptTag","GOOGLE_TRANSLATE_JSSDK_URL","jsonpCallbackName","createGoogleTranslateJsonpCallback","setSelectedLanguageCode","googleCookieLanguage","getGoogleCookieLanguage","browserLanguage","isLanguageCodeInLanguages","getBrowserLanguage","isGoogleCookieLanguageExist","isFetchBrowserLanguageOpen","defaultSelectedCode","handleLanguageInLanguages","selectedCode","l","googleTranslateCookie","getCookie","GOOGLE_TRANSLATE_COOKIE_NAME","googleTranslateCookieResult","createStyleTag","handleDropdownShow","handleDropdownHide","createGoogleTranslateOriginSelectObserve","observe","GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME","triggerTranslate","selectValue","isString","googleTranslateOriginalSelectEl","googleTranslateSelectEl","GoogleTranslateFireEvent","handleDropdownByClick","value","jsxs","Fragment","jsx","cs","GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME","GOOGLE_TRANSLATE_ORIGINAL_DOM_ID"],"mappings":"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"}