Language Settings: Fix error in old browsers (#2891)

This commit is contained in:
Alexander Zinchuk 2023-03-30 18:25:56 -05:00
parent 31e8a934e5
commit 0c2e40d8be
2 changed files with 25 additions and 26 deletions

View File

@ -9,6 +9,7 @@ import type { ISettings, LangCode } from '../../../types';
import type { ApiLanguage } from '../../../api/types';
import { setLanguage } from '../../../util/langProvider';
import { IS_TRANSLATION_SUPPORTED } from '../../../util/windowEnvironment';
import useFlag from '../../../hooks/useFlag';
import useHistoryBack from '../../../hooks/useHistoryBack';
@ -78,20 +79,17 @@ const SettingsLanguage: FC<OwnProps & StateProps> = ({
}, [setSettingOption]);
const doNotTranslateText = useMemo(() => {
if (!doNotTranslate.length) {
if (!IS_TRANSLATION_SUPPORTED || !doNotTranslate.length) {
return undefined;
}
// Do not translate current language
if (doNotTranslate.length === 1) {
if (!languages) {
return lang('Loading');
}
return languages.find(({ langCode }) => langCode === doNotTranslate[0])?.nativeName;
const originalNames = new Intl.DisplayNames([language], { type: 'language' });
return originalNames.of(doNotTranslate[0])!;
}
return lang('Languages', doNotTranslate.length);
}, [doNotTranslate, lang, languages]);
}, [doNotTranslate, lang, language]);
const handleDoNotSelectOpen = useCallback(() => {
onScreenSelect(SettingsScreens.DoNotTranslate);
@ -104,24 +102,26 @@ const SettingsLanguage: FC<OwnProps & StateProps> = ({
return (
<div className="settings-content settings-language custom-scroll">
<div className="settings-item">
<Checkbox
label={lang('ShowTranslateButton')}
checked={canTranslate}
onCheck={handleShouldTranslateChange}
/>
{canTranslate && (
<ListItem
onClick={handleDoNotSelectOpen}
>
{lang('DoNotTranslate')}
<span className="settings-item__current-value">{doNotTranslateText}</span>
</ListItem>
)}
<p className="settings-item-description mb-0 mt-1">
{lang('lng_translate_settings_about')}
</p>
</div>
{IS_TRANSLATION_SUPPORTED && (
<div className="settings-item">
<Checkbox
label={lang('ShowTranslateButton')}
checked={canTranslate}
onCheck={handleShouldTranslateChange}
/>
{canTranslate && (
<ListItem
onClick={handleDoNotSelectOpen}
>
{lang('DoNotTranslate')}
<span className="settings-item__current-value">{doNotTranslateText}</span>
</ListItem>
)}
<p className="settings-item-description mb-0 mt-1">
{lang('lng_translate_settings_about')}
</p>
</div>
)}
<div className="settings-item">
{options ? (
<RadioGroup

View File

@ -105,7 +105,6 @@ function renderWithVirtual<T extends VirtualElement | undefined>(
}
if (DEBUG && $new) {
// @ts-ignore TS 4.9 bug https://github.com/microsoft/TypeScript/issues/51501
const newTarget = 'target' in $new && $new.target;
if (newTarget && (!$current || ('target' in $current && newTarget !== $current.target))) {
throw new Error('[Teact] Cached virtual element was moved within tree');