From ed5a88d9d807c471a548bd9f23e0dcbf60c6cf6e Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Fri, 30 Jun 2023 11:35:29 -0500 Subject: [APP-718] Improvements and fixes to language handling (#931) * Add locale helpers for narrowing languages * Add a translate link to posts in a different language * Update language filtering to use narrowing when multiple declared * Fix a few more RTL layout cases * Fix types --- src/view/com/post-thread/PostThreadItem.tsx | 70 ++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 15 deletions(-) (limited to 'src/view/com/post-thread/PostThreadItem.tsx') diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 002795d77..692fac9e9 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -2,7 +2,7 @@ import React, {useCallback, useMemo} from 'react' import {observer} from 'mobx-react-lite' import {AccessibilityActionEvent, Linking, StyleSheet, View} from 'react-native' import Clipboard from '@react-native-clipboard/clipboard' -import {AtUri} from '@atproto/api' +import {AtUri, AppBskyFeedDefs} from '@atproto/api' import { FontAwesomeIcon, FontAwesomeIconStyle, @@ -18,6 +18,7 @@ import {s} from 'lib/styles' import {ago, niceDate} from 'lib/strings/time' import {sanitizeDisplayName} from 'lib/strings/display-names' import {pluralize} from 'lib/strings/helpers' +import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers' import {useStores} from 'state/index' import {PostMeta} from '../util/PostMeta' import {PostEmbeds} from '../util/post-embeds' @@ -65,6 +66,13 @@ export const PostThreadItem = observer(function PostThreadItem({ }, [item.post.uri, item.post.author.handle]) const repostsTitle = 'Reposts of this post' + const primaryLanguage = store.preferences.contentLanguages[0] || 'en' + const translatorUrl = getTranslatorLink(primaryLanguage, record?.text || '') + const needsTranslation = useMemo( + () => !isPostInLanguage(item.post, store.preferences.contentLanguages), + [item.post, store.preferences.contentLanguages], + ) + const onPressReply = React.useCallback(() => { store.shell.openComposer({ replyTo: { @@ -98,17 +106,9 @@ export const PostThreadItem = observer(function PostThreadItem({ Toast.show('Copied to clipboard') }, [record]) - const primaryLanguage = store.preferences.contentLanguages[0] || 'en' - const onOpenTranslate = React.useCallback(() => { - Linking.openURL( - encodeURI( - `https://translate.google.com/?sl=auto&tl=${primaryLanguage}&text=${ - record?.text || '' - }`, - ), - ) - }, [record, primaryLanguage]) + Linking.openURL(translatorUrl) + }, [translatorUrl]) const onToggleThreadMute = React.useCallback(async () => { try { @@ -276,6 +276,7 @@ export const PostThreadItem = observer(function PostThreadItem({ type="post-text-lg" richText={item.richText} lineHeight={1.3} + style={s.flex1} /> ) : undefined} @@ -283,9 +284,11 @@ export const PostThreadItem = observer(function PostThreadItem({ - - {niceDate(item.post.indexedAt)} - + {hasEngagement ? ( {item.post.repostCount ? ( @@ -411,7 +414,7 @@ export const PostThreadItem = observer(function PostThreadItem({ @@ -419,6 +422,15 @@ export const PostThreadItem = observer(function PostThreadItem({ + {needsTranslation && ( + + + + Translate this post + + + + )} + {niceDate(post.indexedAt)} + {needsTranslation && ( + <> + + + Translate + + + )} + + ) +} + const styles = StyleSheet.create({ outer: { borderTopWidth: 1, @@ -540,6 +577,9 @@ const styles = StyleSheet.create({ paddingHorizontal: 0, paddingBottom: 10, }, + translateLink: { + marginBottom: 6, + }, contentHider: { marginTop: 4, }, -- cgit 1.4.1