guess source language if unavailable
This commit is contained in:
@@ -4,8 +4,10 @@ import {getLocales} from 'expo-localization'
|
|||||||
import {type TranslationTaskResult} from '@bsky.app/expo-translate-text/build/ExpoTranslateText.types'
|
import {type TranslationTaskResult} from '@bsky.app/expo-translate-text/build/ExpoTranslateText.types'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
import {useFocusEffect} from '@react-navigation/native'
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
|
import lande from 'lande'
|
||||||
|
|
||||||
import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate'
|
import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate'
|
||||||
|
import {code3ToCode2Strict} from '#/locale/helpers'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {useAnalytics} from '#/analytics'
|
import {useAnalytics} from '#/analytics'
|
||||||
import {Context} from './context'
|
import {Context} from './context'
|
||||||
@@ -73,10 +75,21 @@ async function attemptTranslation(
|
|||||||
return {
|
return {
|
||||||
translatedText,
|
translatedText,
|
||||||
targetLanguage: result.targetLanguage,
|
targetLanguage: result.targetLanguage,
|
||||||
sourceLanguage: result.sourceLanguage ?? sourceLangCode ?? null, // iOS doesn't return the source language
|
sourceLanguage:
|
||||||
|
result.sourceLanguage ?? sourceLangCode ?? guessLanguage(input), // iOS doesn't return the source language
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace with expo-guess-language
|
||||||
|
function guessLanguage(text: string): string | null {
|
||||||
|
const results = lande(text)
|
||||||
|
// only return high-confidence results
|
||||||
|
if (results[0] && results[0][1] > 0.97) {
|
||||||
|
return code3ToCode2Strict(results[0][0]) ?? null
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Native translation hook. Attempts on-device translation using Apple
|
* Native translation hook. Attempts on-device translation using Apple
|
||||||
* Translation (iOS 18+) or Google ML Kit (Android).
|
* Translation (iOS 18+) or Google ML Kit (Android).
|
||||||
|
|||||||
Reference in New Issue
Block a user