Prevent over-eager translate button (#10007)

This commit is contained in:
Samuel Newman
2026-03-05 20:07:34 +00:00
committed by GitHub
parent fe8e8ce7de
commit 20bf2cd117
+13 -11
View File
@@ -5,9 +5,13 @@ import {Trans, useLingui} from '@lingui/react/macro'
import {HITSLOP_30} from '#/lib/constants' import {HITSLOP_30} from '#/lib/constants'
import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate' import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate'
import {guessLanguage, useTranslate} from '#/lib/translation' import {useTranslate} from '#/lib/translation'
import {type TranslationFunction} from '#/lib/translation' import {type TranslationFunction} from '#/lib/translation'
import {codeToLanguageName, languageName} from '#/locale/helpers' import {
codeToLanguageName,
isPostInLanguage,
languageName,
} from '#/locale/helpers'
import {LANGUAGES} from '#/locale/languages' import {LANGUAGES} from '#/locale/languages'
import {useLanguagePrefs} from '#/state/preferences' import {useLanguagePrefs} from '#/state/preferences'
import {atoms as a, native, useTheme, web} from '#/alf' import {atoms as a, native, useTheme, web} from '#/alf'
@@ -36,8 +40,10 @@ export function TranslatedPost({
key: post.uri, key: post.uri,
}) })
const postLanguage = useMemo(() => guessLanguage(postText), [postText]) const needsTranslation = useMemo(() => {
const needsTranslation = postLanguage !== langPrefs.primaryLanguage if (hideTranslateLink) return false
return !isPostInLanguage(post, [langPrefs.primaryLanguage])
}, [hideTranslateLink, post, langPrefs.primaryLanguage])
switch (translationState.status) { switch (translationState.status) {
case 'loading': case 'loading':
@@ -49,7 +55,7 @@ export function TranslatedPost({
translate={translate} translate={translate}
postText={postText} postText={postText}
sourceLanguage={ sourceLanguage={
translationState.sourceLanguage ?? postLanguage ?? null // Fallback primarily for iOS translationState.sourceLanguage ?? null // Fallback primarily for iOS
} }
translatedText={translationState.translatedText} translatedText={translationState.translatedText}
/> />
@@ -65,12 +71,10 @@ export function TranslatedPost({
) )
default: default:
return ( return (
!hideTranslateLink &&
needsTranslation && ( needsTranslation && (
<TranslationLink <TranslationLink
postText={postText} postText={postText}
primaryLanguage={langPrefs.primaryLanguage} primaryLanguage={langPrefs.primaryLanguage}
sourceLanguage={postLanguage}
translate={translate} translate={translate}
/> />
) )
@@ -96,12 +100,10 @@ function TranslationLoading() {
function TranslationLink({ function TranslationLink({
postText, postText,
primaryLanguage, primaryLanguage,
sourceLanguage,
translate, translate,
}: { }: {
postText: string postText: string
primaryLanguage: string primaryLanguage: string
sourceLanguage: string | null
translate: TranslationFunction translate: TranslationFunction
}) { }) {
const t = useTheme() const t = useTheme()
@@ -115,11 +117,11 @@ function TranslationLink({
}) })
ax.metric('translate', { ax.metric('translate', {
sourceLanguages: sourceLanguage ? [sourceLanguage] : [], sourceLanguages: [], // todo: get from post maybe?
targetLanguage: primaryLanguage, targetLanguage: primaryLanguage,
textLength: postText.length, textLength: postText.length,
}) })
}, [ax, postText, primaryLanguage, translate, sourceLanguage]) }, [ax, postText, primaryLanguage, translate])
return ( return (
<View <View