diff options
Diffstat (limited to 'src')
77 files changed, 13640 insertions, 1220 deletions
diff --git a/src/App.web.tsx b/src/App.web.tsx index 6c67dc28b..1bdb3c208 100644 --- a/src/App.web.tsx +++ b/src/App.web.tsx @@ -7,6 +7,7 @@ import {RootSiblingParent} from 'react-native-root-siblings' import 'view/icons' +import {ThemeProvider as Alf} from '#/alf' import {init as initPersistedState} from '#/state/persisted' import {useColorMode} from 'state/shell' import {Shell} from 'view/shell/index' @@ -28,11 +29,13 @@ import { } from 'state/session' import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread' import * as persisted from '#/state/persisted' +import {useColorModeTheme} from '#/alf/util/useColorModeTheme' function InnerApp() { const {isInitialLoad, currentAccount} = useSession() const {resumeSession} = useSessionApi() const colorMode = useColorMode() + const theme = useColorModeTheme(colorMode) // init useEffect(() => { @@ -44,23 +47,25 @@ function InnerApp() { if (isInitialLoad) return null return ( - <React.Fragment - // Resets the entire tree below when it changes: - key={currentAccount?.did}> - <LoggedOutViewProvider> - <UnreadNotifsProvider> - <ThemeProvider theme={colorMode}> - {/* All components should be within this provider */} - <RootSiblingParent> - <SafeAreaProvider> - <Shell /> - </SafeAreaProvider> - </RootSiblingParent> - <ToastContainer /> - </ThemeProvider> - </UnreadNotifsProvider> - </LoggedOutViewProvider> - </React.Fragment> + <Alf theme={theme}> + <React.Fragment + // Resets the entire tree below when it changes: + key={currentAccount?.did}> + <LoggedOutViewProvider> + <UnreadNotifsProvider> + <ThemeProvider theme={colorMode}> + {/* All components should be within this provider */} + <RootSiblingParent> + <SafeAreaProvider> + <Shell /> + </SafeAreaProvider> + </RootSiblingParent> + <ToastContainer /> + </ThemeProvider> + </UnreadNotifsProvider> + </LoggedOutViewProvider> + </React.Fragment> + </Alf> ) } diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 27174a31f..76a893c68 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -61,7 +61,7 @@ import {ProfileListScreen} from './view/screens/ProfileList' import {PostThreadScreen} from './view/screens/PostThread' import {PostLikedByScreen} from './view/screens/PostLikedBy' import {PostRepostedByScreen} from './view/screens/PostRepostedBy' -import {DebugScreen} from './view/screens/Debug' +import {DebugScreen} from './view/screens/DebugNew' import {LogScreen} from './view/screens/Log' import {SupportScreen} from './view/screens/Support' import {PrivacyPolicyScreen} from './view/screens/PrivacyPolicy' @@ -74,6 +74,7 @@ import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts' import {SavedFeeds} from 'view/screens/SavedFeeds' import {PreferencesHomeFeed} from 'view/screens/PreferencesHomeFeed' import {PreferencesThreads} from 'view/screens/PreferencesThreads' +import {PreferencesExternalEmbeds} from '#/view/screens/PreferencesExternalEmbeds' import {createNativeStackNavigatorWithAuth} from './view/shell/createNativeStackNavigatorWithAuth' const navigationRef = createNavigationContainerRef<AllNavigatorParams>() @@ -243,6 +244,14 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) { getComponent={() => PreferencesThreads} options={{title: title('Threads Preferences'), requireAuth: true}} /> + <Stack.Screen + name="PreferencesExternalEmbeds" + getComponent={() => PreferencesExternalEmbeds} + options={{ + title: title('External Media Preferences'), + requireAuth: true, + }} + /> </> ) } diff --git a/src/Splash.tsx b/src/Splash.tsx index fc70bb3b7..bb2c7a175 100644 --- a/src/Splash.tsx +++ b/src/Splash.tsx @@ -1,5 +1,11 @@ import React, {useCallback, useEffect} from 'react' -import {View, StyleSheet, Image as RNImage} from 'react-native' +import { + View, + StyleSheet, + Image as RNImage, + AccessibilityInfo, + useColorScheme, +} from 'react-native' import * as SplashScreen from 'expo-splash-screen' import {Image} from 'expo-image' import Animated, { @@ -14,9 +20,18 @@ import MaskedView from '@react-native-masked-view/masked-view' import {useSafeAreaInsets} from 'react-native-safe-area-context' import Svg, {Path, SvgProps} from 'react-native-svg' +import {isAndroid} from '#/platform/detection' +import {useColorMode} from 'state/shell' +import {colors} from '#/lib/styles' + // @ts-ignore import splashImagePointer from '../assets/splash.png' +// @ts-ignore +import darkSplashImagePointer from '../assets/splash-dark.png' const splashImageUri = RNImage.resolveAssetSource(splashImagePointer).uri +const darkSplashImageUri = RNImage.resolveAssetSource( + darkSplashImagePointer, +).uri export const Logo = React.forwardRef(function LogoImpl(props: SvgProps, ref) { const width = 1000 @@ -27,9 +42,9 @@ export const Logo = React.forwardRef(function LogoImpl(props: SvgProps, ref) { // @ts-ignore it's fiiiiine ref={ref} viewBox="0 0 64 66" - style={{width, height}}> + style={[{width, height}, props.style]}> <Path - fill="#fff" + fill={props.fill || '#fff'} d="M13.873 3.77C21.21 9.243 29.103 20.342 32 26.3v15.732c0-.335-.13.043-.41.858-1.512 4.414-7.418 21.642-20.923 7.87-7.111-7.252-3.819-14.503 9.125-16.692-7.405 1.252-15.73-.817-18.014-8.93C1.12 22.804 0 8.431 0 6.488 0-3.237 8.579-.18 13.873 3.77ZM50.127 3.77C42.79 9.243 34.897 20.342 32 26.3v15.732c0-.335.13.043.41.858 1.512 4.414 7.418 21.642 20.923 7.87 7.111-7.252 3.819-14.503-9.125-16.692 7.405 1.252 15.73-.817 18.014-8.93C62.88 22.804 64 8.431 64 6.488 64-3.237 55.422-.18 50.127 3.77Z" /> </Svg> @@ -50,9 +65,22 @@ export function Splash(props: React.PropsWithChildren<Props>) { const outroAppOpacity = useSharedValue(0) const [isAnimationComplete, setIsAnimationComplete] = React.useState(false) const [isImageLoaded, setIsImageLoaded] = React.useState(false) - const isReady = props.isReady && isImageLoaded + const [isLayoutReady, setIsLayoutReady] = React.useState(false) + const [reduceMotion, setReduceMotion] = React.useState<boolean | undefined>( + false, + ) + const isReady = + props.isReady && + isImageLoaded && + isLayoutReady && + reduceMotion !== undefined + + const colorMode = useColorMode() + const colorScheme = useColorScheme() + const themeName = colorMode === 'system' ? colorScheme : colorMode + const isDarkMode = themeName === 'dark' - const logoAnimations = useAnimatedStyle(() => { + const logoAnimation = useAnimatedStyle(() => { return { transform: [ { @@ -62,7 +90,7 @@ export function Splash(props: React.PropsWithChildren<Props>) { scale: interpolate( outroLogo.value, [0, 0.08, 1], - [1, 0.8, 400], + [1, 0.8, 500], 'clamp', ), }, @@ -70,6 +98,27 @@ export function Splash(props: React.PropsWithChildren<Props>) { opacity: interpolate(intro.value, [0, 1], [0, 1], 'clamp'), } }) + const reducedLogoAnimation = useAnimatedStyle(() => { + return { + transform: [ + { + scale: interpolate(intro.value, [0, 1], [0.8, 1], 'clamp'), + }, + ], + opacity: interpolate(intro.value, [0, 1], [0, 1], 'clamp'), + } + }) + + const logoWrapperAnimation = useAnimatedStyle(() => { + return { + opacity: interpolate( + outroAppOpacity.value, + [0, 0.1, 0.2, 1], + [1, 1, 0, 0], + 'clamp', + ), + } + }) const appAnimation = useAnimatedStyle(() => { return { @@ -80,7 +129,7 @@ export function Splash(props: React.PropsWithChildren<Props>) { ], opacity: interpolate( outroAppOpacity.value, - [0, 0.08, 0.15, 1], + [0, 0.1, 0.2, 1], [0, 0, 1, 1], 'clamp', ), @@ -88,82 +137,121 @@ export function Splash(props: React.PropsWithChildren<Props>) { }) const onFinish = useCallback(() => setIsAnimationComplete(true), []) + const onLayout = useCallback(() => setIsLayoutReady(true), []) + const onLoadEnd = useCallback(() => setIsImageLoaded(true), []) useEffect(() => { if (isReady) { - // hide on mount - SplashScreen.hideAsync().catch(() => {}) - - intro.value = withTiming( - 1, - {duration: 400, easing: Easing.out(Easing.cubic)}, - async () => { - // set these values to check animation at specific point - // outroLogo.value = 0.1 - // outroApp.value = 0.1 - outroLogo.value = withTiming( + SplashScreen.hideAsync() + .then(() => { + intro.value = withTiming( 1, - {duration: 1200, easing: Easing.in(Easing.cubic)}, - () => { - runOnJS(onFinish)() + {duration: 400, easing: Easing.out(Easing.cubic)}, + async () => { + // set these values to check animation at specific point + // outroLogo.value = 0.1 + // outroApp.value = 0.1 + outroLogo.value = withTiming( + 1, + {duration: 1200, easing: Easing.in(Easing.cubic)}, + () => { + runOnJS(onFinish)() + }, + ) + outroApp.value = withTiming(1, { + duration: 1200, + easing: Easing.inOut(Easing.cubic), + }) + outroAppOpacity.value = withTiming(1, { + duration: 1200, + easing: Easing.in(Easing.cubic), + }) }, ) - outroApp.value = withTiming(1, { - duration: 1200, - easing: Easing.inOut(Easing.cubic), - }) - outroAppOpacity.value = withTiming(1, { - duration: 1200, - easing: Easing.in(Easing.cubic), - }) - }, - ) + }) + .catch(() => {}) } }, [onFinish, intro, outroLogo, outroApp, outroAppOpacity, isReady]) - const onLoadEnd = useCallback(() => { - setIsImageLoaded(true) - }, [setIsImageLoaded]) + useEffect(() => { + AccessibilityInfo.isReduceMotionEnabled().then(setReduceMotion) + }, []) + + const logoAnimations = + reduceMotion === true ? reducedLogoAnimation : logoAnimation return ( - <View style={{flex: 1}}> + <View style={{flex: 1}} onLayout={onLayout}> {!isAnimationComplete && ( <Image accessibilityIgnoresInvertColors onLoadEnd={onLoadEnd} - source={{uri: splashImageUri}} + source={{uri: isDarkMode ? darkSplashImageUri : splashImageUri}} style={StyleSheet.absoluteFillObject} /> )} - <MaskedView - style={[StyleSheet.absoluteFillObject]} - maskElement={ - <Animated.View - style={[ - StyleSheet.absoluteFillObject, - { - // Transparent background because mask is based off alpha channel. - backgroundColor: 'transparent', - flex: 1, - justifyContent: 'center', - alignItems: 'center', - transform: [{translateY: -(insets.top / 2)}, {scale: 0.1}], // scale from 1000px to 100px - }, - ]}> - <AnimatedLogo style={[logoAnimations]} /> - </Animated.View> - }> - {!isAnimationComplete && ( - <View - style={[StyleSheet.absoluteFillObject, {backgroundColor: 'white'}]} - /> - )} - - <Animated.View style={[{flex: 1}, appAnimation]}> - {props.children} - </Animated.View> - </MaskedView> + {isReady && + (isAndroid || reduceMotion === true ? ( + // Use a simple fade on older versions of android (work around a bug) + <> + <Animated.View style={[{flex: 1}, appAnimation]}> + {props.children} + </Animated.View> + + {!isAnimationComplete && ( + <Animated.View + style={[ + StyleSheet.absoluteFillObject, + logoWrapperAnimation, + { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + transform: [{translateY: -(insets.top / 2)}, {scale: 0.1}], // scale from 1000px to 100px + }, + ]}> + <AnimatedLogo + fill={isDarkMode ? colors.blue3 : '#fff'} + style={[{opacity: 0}, logoAnimations]} + /> + </Animated.View> + )} + </> + ) : ( + <MaskedView + style={[StyleSheet.absoluteFillObject]} + maskElement={ + <Animated.View + style={[ + { + // Transparent background because mask is based off alpha channel. + backgroundColor: 'transparent', + flex: 1, + justifyContent: 'center', + alignItems: 'center', + transform: [{translateY: -(insets.top / 2)}, {scale: 0.1}], // scale from 1000px to 100px + }, + ]}> + <AnimatedLogo + fill={isDarkMode ? colors.blue3 : '#fff'} + style={[logoAnimations]} + /> + </Animated.View> + }> + {!isAnimationComplete && ( + <View + style={[ + StyleSheet.absoluteFillObject, + {backgroundColor: isDarkMode ? colors.blue3 : '#fff'}, + ]} + /> + )} + <Animated.View style={[{flex: 1}, appAnimation]}> + {props.children} + </Animated.View> + </MaskedView> + ))} </View> ) } diff --git a/src/alf/README.md b/src/alf/README.md new file mode 100644 index 000000000..aa31bcf98 --- /dev/null +++ b/src/alf/README.md @@ -0,0 +1,56 @@ +# Application Layout Framework (ALF) + +A set of UI primitives and components. + +## Usage + +Naming conventions follow Tailwind — delimited with a `_` instead of `-` to +enable object access — with a couple exceptions: + +**Spacing** + +Uses "t-shirt" sizes `xxs`, `xs`, `sm`, `md`, `lg`, `xl` and `xxl` instead of +increments of 4px. We only use a few common spacings, and otherwise typically +rely on many one-off values. + +**Text Size** + +Uses "t-shirt" sizes `xxs`, `xs`, `sm`, `md`, `lg`, `xl` and `xxl` to match our +type scale. + +**Line Height** + +The text size atoms also apply a line-height with the same value as the size, +for a 1:1 ratio. `tight` and `normal` are retained for use in the few places +where we need leading. + +### Atoms + +An (mostly-complete) set of style definitions that match Tailwind CSS selectors. +These are static and reused throughout the app. + +```tsx +import { atoms } from '#/alf' + +<View style={[atoms.flex_row]} /> +``` + +### Theme + +Any values that rely on the theme, namely colors. + +```tsx +const t = useTheme() + +<View style={[atoms.flex_row, t.atoms.bg]} /> +``` + +### Breakpoints + +```tsx +const b = useBreakpoints() + +if (b.gtMobile) { + // render tablet or desktop UI +} +``` diff --git a/src/alf/atoms.ts b/src/alf/atoms.ts new file mode 100644 index 000000000..c142f5f71 --- /dev/null +++ b/src/alf/atoms.ts @@ -0,0 +1,514 @@ +import * as tokens from '#/alf/tokens' + +export const atoms = { + /* + * Positioning + */ + absolute: { + position: 'absolute', + }, + relative: { + position: 'relative', + }, + inset_0: { + top: 0, + left: 0, + right: 0, + bottom: 0, + }, + z_10: { + zIndex: 10, + }, + z_20: { + zIndex: 20, + }, + z_30: { + zIndex: 30, + }, + z_40: { + zIndex: 40, + }, + z_50: { + zIndex: 50, + }, + + /* + * Width + */ + w_full: { + width: '100%', + }, + h_full: { + height: '100%', + }, + + /* + * Border radius + */ + rounded_sm: { + borderRadius: tokens.borderRadius.sm, + }, + rounded_md: { + borderRadius: tokens.borderRadius.md, + }, + rounded_full: { + borderRadius: tokens.borderRadius.full, + }, + + /* + * Flex + */ + gap_xxs: { + gap: tokens.space.xxs, + }, + gap_xs: { + gap: tokens.space.xs, + }, + gap_sm: { + gap: tokens.space.sm, + }, + gap_md: { + gap: tokens.space.md, + }, + gap_lg: { + gap: tokens.space.lg, + }, + gap_xl: { + gap: tokens.space.xl, + }, + gap_xxl: { + gap: tokens.space.xxl, + }, + flex: { + display: 'flex', + }, + flex_row: { + flexDirection: 'row', + }, + flex_wrap: { + flexWrap: 'wrap', + }, + flex_1: { + flex: 1, + }, + flex_grow: { + flexGrow: 1, + }, + flex_shrink: { + flexShrink: 1, + }, + justify_center: { + justifyContent: 'center', + }, + justify_between: { + justifyContent: 'space-between', + }, + justify_end: { + justifyContent: 'flex-end', + }, + align_center: { + alignItems: 'center', + }, + align_start: { + alignItems: 'flex-start', + }, + align_end: { + alignItems: 'flex-end', + }, + + /* + * Text + */ + text_center: { + textAlign: 'center', + }, + text_right: { + textAlign: 'right', + }, + text_xxs: { + fontSize: tokens.fontSize.xxs, + lineHeight: tokens.fontSize.xxs, + }, + text_xs: { + fontSize: tokens.fontSize.xs, + lineHeight: tokens.fontSize.xs, + }, + text_sm: { + fontSize: tokens.fontSize.sm, + lineHeight: tokens.fontSize.sm, + }, + text_md: { + fontSize: tokens.fontSize.md, + lineHeight: tokens.fontSize.md, + }, + text_lg: { + fontSize: tokens.fontSize.lg, + lineHeight: tokens.fontSize.lg, + }, + text_xl: { + fontSize: tokens.fontSize.xl, + lineHeight: tokens.fontSize.xl, + }, + text_xxl: { + fontSize: tokens.fontSize.xxl, + lineHeight: tokens.fontSize.xxl, + }, + leading_tight: { + lineHeight: 1.25, + }, + leading_normal: { + lineHeight: 1.5, + }, + font_normal: { + fontWeight: tokens.fontWeight.normal, + }, + font_semibold: { + fontWeight: tokens.fontWeight.semibold, + }, + font_bold: { + fontWeight: tokens.fontWeight.bold, + }, + + /* + * Border + */ + border: { + borderWidth: 1, + }, + border_t: { + borderTopWidth: 1, + }, + border_b: { + borderBottomWidth: 1, + }, + + /* + * Padding + */ + p_xxs: { + padding: tokens.space.xxs, + }, + p_xs: { + padding: tokens.space.xs, + }, + p_sm: { + padding: tokens.space.sm, + }, + p_md: { + padding: tokens.space.md, + }, + p_lg: { + padding: tokens.space.lg, + }, + p_xl: { + padding: tokens.space.xl, + }, + p_xxl: { + padding: tokens.space.xxl, + }, + px_xxs: { + paddingLeft: tokens.space.xxs, + paddingRight: tokens.space.xxs, + }, + px_xs: { + paddingLeft: tokens.space.xs, + paddingRight: tokens.space.xs, + }, + px_sm: { + paddingLeft: tokens.space.sm, + paddingRight: tokens.space.sm, + }, + px_md: { + paddingLeft: tokens.space.md, + paddingRight: tokens.space.md, + }, + px_lg: { + paddingLeft: tokens.space.lg, + paddingRight: tokens.space.lg, + }, + px_xl: { + paddingLeft: tokens.space.xl, + paddingRight: tokens.space.xl, + }, + px_xxl: { + paddingLeft: tokens.space.xxl, + paddingRight: tokens.space.xxl, + }, + py_xxs: { + paddingTop: tokens.space.xxs, + paddingBottom: tokens.space.xxs, + }, + py_xs: { + paddingTop: tokens.space.xs, + paddingBottom: tokens.space.xs, + }, + py_sm: { + paddingTop: tokens.space.sm, + paddingBottom: tokens.space.sm, + }, + py_md: { + paddingTop: tokens.space.md, + paddingBottom: tokens.space.md, + }, + py_lg: { + paddingTop: tokens.space.lg, + paddingBottom: tokens.space.lg, + }, + py_xl: { + paddingTop: tokens.space.xl, + paddingBottom: tokens.space.xl, + }, + py_xxl: { + paddingTop: tokens.space.xxl, + paddingBottom: tokens.space.xxl, + }, + pt_xxs: { + paddingTop: tokens.space.xxs, + }, + pt_xs: { + paddingTop: tokens.space.xs, + }, + pt_sm: { + paddingTop: tokens.space.sm, + }, + pt_md: { + paddingTop: tokens.space.md, + }, + pt_lg: { + paddingTop: tokens.space.lg, + }, + pt_xl: { + paddingTop: tokens.space.xl, + }, + pt_xxl: { + paddingTop: tokens.space.xxl, + }, + pb_xxs: { + paddingBottom: tokens.space.xxs, + }, + pb_xs: { + paddingBottom: tokens.space.xs, + }, + pb_sm: { + paddingBottom: tokens.space.sm, + }, + pb_md: { + paddingBottom: tokens.space.md, + }, + pb_lg: { + paddingBottom: tokens.space.lg, + }, + pb_xl: { + paddingBottom: tokens.space.xl, + }, + pb_xxl: { + paddingBottom: tokens.space.xxl, + }, + pl_xxs: { + paddingLeft: tokens.space.xxs, + }, + pl_xs: { + paddingLeft: tokens.space.xs, + }, + pl_sm: { + paddingLeft: tokens.space.sm, + }, + pl_md: { + paddingLeft: tokens.space.md, + }, + pl_lg: { + paddingLeft: tokens.space.lg, + }, + pl_xl: { + paddingLeft: tokens.space.xl, + }, + pl_xxl: { + paddingLeft: tokens.space.xxl, + }, + pr_xxs: { + paddingRight: tokens.space.xxs, + }, + pr_xs: { + paddingRight: tokens.space.xs, + }, + pr_sm: { + paddingRight: tokens.space.sm, + }, + pr_md: { + paddingRight: tokens.space.md, + }, + pr_lg: { + paddingRight: tokens.space.lg, + }, + pr_xl: { + paddingRight: tokens.space.xl, + }, + pr_xxl: { + paddingRight: tokens.space.xxl, + }, + + /* + * Margin + */ + m_xxs: { + margin: tokens.space.xxs, + }, + m_xs: { + margin: tokens.space.xs, + }, + m_sm: { + margin: tokens.space.sm, + }, + m_md: { + margin: tokens.space.md, + }, + m_lg: { + margin: tokens.space.lg, + }, + m_xl: { + margin: tokens.space.xl, + }, + m_xxl: { + margin: tokens.space.xxl, + }, + mx_xxs: { + marginLeft: tokens.space.xxs, + marginRight: tokens.space.xxs, + }, + mx_xs: { + marginLeft: tokens.space.xs, + marginRight: tokens.space.xs, + }, + mx_sm: { + marginLeft: tokens.space.sm, + marginRight: tokens.space.sm, + }, + mx_md: { + marginLeft: tokens.space.md, + marginRight: tokens.space.md, + }, + mx_lg: { + marginLeft: tokens.space.lg, + marginRight: tokens.space.lg, + }, + mx_xl: { + marginLeft: tokens.space.xl, + marginRight: tokens.space.xl, + }, + mx_xxl: { + marginLeft: tokens.space.xxl, + marginRight: tokens.space.xxl, + }, + my_xxs: { + marginTop: tokens.space.xxs, + marginBottom: tokens.space.xxs, + }, + my_xs: { + marginTop: tokens.space.xs, + marginBottom: tokens.space.xs, + }, + my_sm: { + marginTop: tokens.space.sm, + marginBottom: tokens.space.sm, + }, + my_md: { + marginTop: tokens.space.md, + marginBottom: tokens.space.md, + }, + my_lg: { + marginTop: tokens.space.lg, + marginBottom: tokens.space.lg, + }, + my_xl: { + marginTop: tokens.space.xl, + marginBottom: tokens.space.xl, + }, + my_xxl: { + marginTop: tokens.space.xxl, + marginBottom: tokens.space.xxl, + }, + mt_xxs: { + marginTop: tokens.space.xxs, + }, + mt_xs: { + marginTop: tokens.space.xs, + }, + mt_sm: { + marginTop: tokens.space.sm, + }, + mt_md: { + marginTop: tokens.space.md, + }, + mt_lg: { + marginTop: tokens.space.lg, + }, + mt_xl: { + marginTop: tokens.space.xl, + }, + mt_xxl: { + marginTop: tokens.space.xxl, + }, + mb_xxs: { + marginBottom: tokens.space.xxs, + }, + mb_xs: { + marginBottom: tokens.space.xs, + }, + mb_sm: { + marginBottom: tokens.space.sm, + }, + mb_md: { + marginBottom: tokens.space.md, + }, + mb_lg: { + marginBottom: tokens.space.lg, + }, + mb_xl: { + marginBottom: tokens.space.xl, + }, + mb_xxl: { + marginBottom: tokens.space.xxl, + }, + ml_xxs: { + marginLeft: tokens.space.xxs, + }, + ml_xs: { + marginLeft: tokens.space.xs, + }, + ml_sm: { + marginLeft: tokens.space.sm, + }, + ml_md: { + marginLeft: tokens.space.md, + }, + ml_lg: { + marginLeft: tokens.space.lg, + }, + ml_xl: { + marginLeft: tokens.space.xl, + }, + ml_xxl: { + marginLeft: tokens.space.xxl, + }, + mr_xxs: { + marginRight: tokens.space.xxs, + }, + mr_xs: { + marginRight: tokens.space.xs, + }, + mr_sm: { + marginRight: tokens.space.sm, + }, + mr_md: { + marginRight: tokens.space.md, + }, + mr_lg: { + marginRight: tokens.space.lg, + }, + mr_xl: { + marginRight: tokens.space.xl, + }, + mr_xxl: { + marginRight: tokens.space.xxl, + }, +} as const diff --git a/src/alf/index.tsx b/src/alf/index.tsx new file mode 100644 index 000000000..1daa0bfed --- /dev/null +++ b/src/alf/index.tsx @@ -0,0 +1,92 @@ +import React from 'react' +import {Dimensions} from 'react-native' +import * as themes from '#/alf/themes' + +export * as tokens from '#/alf/tokens' +export {atoms} from '#/alf/atoms' +export * from '#/alf/util/platform' + +type BreakpointName = keyof typeof breakpoints + +/* + * Breakpoints + */ +const breakpoints: { + [key: string]: number +} = { + gtMobile: 800, + gtTablet: 1200, +} +function getActiveBreakpoints({width}: {width: number}) { + const active: (keyof typeof breakpoints)[] = Object.keys(breakpoints).filter( + breakpoint => width >= breakpoints[breakpoint], + ) + + return { + active: active[active.length - 1], + gtMobile: active.includes('gtMobile'), + gtTablet: active.includes('gtTablet'), + } +} + +/* + * Context + */ +export const Context = React.createContext<{ + themeName: themes.ThemeName + theme: themes.Theme + breakpoints: { + active: BreakpointName | undefined + gtMobile: boolean + gtTablet: boolean + } +}>({ + themeName: 'light', + theme: themes.light, + breakpoints: { + active: undefined, + gtMobile: false, + gtTablet: false, + }, +}) + +export function ThemeProvider({ + children, + theme: themeName, +}: React.PropsWithChildren<{theme: themes.ThemeName}>) { + const theme = themes[themeName] + const [breakpoints, setBreakpoints] = React.useState(() => + getActiveBreakpoints({width: Dimensions.get('window').width}), + ) + + React.useEffect(() => { + const listener = Dimensions.addEventListener('change', ({window}) => { + const bp = getActiveBreakpoints({width: window.width}) + if (bp.active !== breakpoints.active) setBreakpoints(bp) + }) + + return listener.remove + }, [breakpoints, setBreakpoints]) + + return ( + <Context.Provider + value={React.useMemo( + () => ({ + themeName: themeName, + theme: theme, + breakpoints, + }), + [theme, themeName, breakpoints], + )}> + {children} + </Context.Provider> + ) +} + +export function useTheme() { + return React.useContext(Context).theme +} + +export function useBreakpoints() { + return React.useContext(Context).breakpoints +} diff --git a/src/alf/themes.ts b/src/alf/themes.ts new file mode 100644 index 000000000..aae5c5893 --- /dev/null +++ b/src/alf/themes.ts @@ -0,0 +1,108 @@ +import * as tokens from '#/alf/tokens' +import type {Mutable} from '#/alf/types' + +export type ThemeName = 'light' | 'dark' +export type ReadonlyTheme = typeof light +export type Theme = Mutable<ReadonlyTheme> + +export type Palette = { + primary: string + positive: string + negative: string +} + +export const lightPalette: Palette = { + primary: tokens.color.blue_500, + positive: tokens.color.green_500, + negative: tokens.color.red_500, +} as const + +export const darkPalette: Palette = { + primary: tokens.color.blue_500, + positive: tokens.color.green_400, + negative: tokens.color.red_400, +} as const + +export const light = { + palette: lightPalette, + atoms: { + text: { + color: tokens.color.gray_1000, + }, + text_contrast_700: { + color: tokens.color.gray_700, + }, + text_contrast_500: { + color: tokens.color.gray_500, + }, + text_inverted: { + color: tokens.color.white, + }, + bg: { + backgroundColor: tokens.color.white, + }, + bg_contrast_100: { + backgroundColor: tokens.color.gray_100, + }, + bg_contrast_200: { + backgroundColor: tokens.color.gray_200, + }, + bg_contrast_300: { + backgroundColor: tokens.color.gray_300, + }, + bg_positive: { + backgroundColor: tokens.color.green_500, + }, + bg_negative: { + backgroundColor: tokens.color.red_400, + }, + border: { + borderColor: tokens.color.gray_200, + }, + border_contrast_500: { + borderColor: tokens.color.gray_500, + }, + }, +} + +export const dark: Theme = { + palette: darkPalette, + atoms: { + text: { + color: tokens.color.white, + }, + text_contrast_700: { + color: tokens.color.gray_300, + }, + text_contrast_500: { + color: tokens.color.gray_500, + }, + text_inverted: { + color: tokens.color.gray_1000, + }, + bg: { + backgroundColor: tokens.color.gray_1000, + }, + bg_contrast_100: { + backgroundColor: tokens.color.gray_900, + }, + bg_contrast_200: { + backgroundColor: tokens.color.gray_800, + }, + bg_contrast_300: { + backgroundColor: tokens.color.gray_700, + }, + bg_positive: { + backgroundColor: tokens.color.green_400, + }, + bg_negative: { + backgroundColor: tokens.color.red_400, + }, + border: { + borderColor: tokens.color.gray_800, + }, + border_contrast_500: { + borderColor: tokens.color.gray_500, + }, + }, +} diff --git a/src/alf/tokens.ts b/src/alf/tokens.ts new file mode 100644 index 000000000..4034e0deb --- /dev/null +++ b/src/alf/tokens.ts @@ -0,0 +1,100 @@ +const BLUE_HUE = 211 +const GRAYSCALE_SATURATION = 22 + +export const color = { + white: '#FFFFFF', + + gray_0: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 100%)`, + gray_100: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 95%)`, + gray_200: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 85%)`, + gray_300: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 75%)`, + gray_400: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 65%)`, + gray_500: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 55%)`, + gray_600: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 45%)`, + gray_700: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 35%)`, + gray_800: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 25%)`, + gray_900: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 15%)`, + gray_1000: `hsl(${BLUE_HUE}, ${GRAYSCALE_SATURATION}%, 5%)`, + + blue_0: `hsl(${BLUE_HUE}, 99%, 100%)`, + blue_100: `hsl(${BLUE_HUE}, 99%, 93%)`, + blue_200: `hsl(${BLUE_HUE}, 99%, 83%)`, + blue_300: `hsl(${BLUE_HUE}, 99%, 73%)`, + blue_400: `hsl(${BLUE_HUE}, 99%, 63%)`, + blue_500: `hsl(${BLUE_HUE}, 99%, 53%)`, + blue_600: `hsl(${BLUE_HUE}, 99%, 43%)`, + blue_700: `hsl(${BLUE_HUE}, 99%, 33%)`, + blue_800: `hsl(${BLUE_HUE}, 99%, 23%)`, + blue_900: `hsl(${BLUE_HUE}, 99%, 13%)`, + blue_1000: `hsl(${BLUE_HUE}, 99%, 8%)`, + + green_0: `hsl(130, 60%, 100%)`, + green_100: `hsl(130, 60%, 95%)`, + green_200: `hsl(130, 60%, 85%)`, + green_300: `hsl(130, 60%, 75%)`, + green_400: `hsl(130, 60%, 65%)`, + green_500: `hsl(130, 60%, 55%)`, + green_600: `hsl(130, 60%, 45%)`, + green_700: `hsl(130, 60%, 35%)`, + green_800: `hsl(130, 60%, 25%)`, + green_900: `hsl(130, 60%, 15%)`, + green_1000: `hsl(130, 60%, 5%)`, + + red_0: `hsl(349, 96%, 100%)`, + red_100: `hsl(349, 96%, 95%)`, + red_200: `hsl(349, 96%, 85%)`, + red_300: `hsl(349, 96%, 75%)`, + red_400: `hsl(349, 96%, 65%)`, + red_500: `hsl(349, 96%, 55%)`, + red_600: `hsl(349, 96%, 45%)`, + red_700: `hsl(349, 96%, 35%)`, + red_800: `hsl(349, 96%, 25%)`, + red_900: `hsl(349, 96%, 15%)`, + red_1000: `hsl(349, 96%, 5%)`, +} as const + +export const space = { + xxs: 2, + xs: 4, + sm: 8, + md: 12, + lg: 18, + xl: 24, + xxl: 32, +} as const + +export const fontSize = { + xxs: 10, + xs: 12, + sm: 14, + md: 16, + lg: 18, + xl: 22, + xxl: 26, +} as const + +// TODO test +export const lineHeight = { + none: 1, + normal: 1.5, + relaxed: 1.625, +} as const + +export const borderRadius = { + sm: 8, + md: 12, + full: 999, +} as const + +export const fontWeight = { + normal: '400', + semibold: '600', + bold: '900', +} as const + +export type Color = keyof typeof color +export type Space = keyof typeof space +export type FontSize = keyof typeof fontSize +export type LineHeight = keyof typeof lineHeight +export type BorderRadius = keyof typeof borderRadius +export type FontWeight = keyof typeof fontWeight diff --git a/src/alf/types.ts b/src/alf/types.ts new file mode 100644 index 000000000..76ac05d40 --- /dev/null +++ b/src/alf/types.ts @@ -0,0 +1,16 @@ +type LiteralToCommon<T extends PropertyKey> = T extends number + ? number + : T extends string + ? string + : T extends symbol + ? symbol + : never + +/** + * @see https://stackoverflow.com/questions/68249999/use-as-const-in-typescript-without-adding-readonly-modifiers + */ +export type Mutable<T> = { + -readonly [K in keyof T]: T[K] extends PropertyKey + ? LiteralToCommon<T[K]> + : Mutable<T[K]> +} diff --git a/src/alf/util/platform.ts b/src/alf/util/platform.ts new file mode 100644 index 000000000..544f5480b --- /dev/null +++ b/src/alf/util/platform.ts @@ -0,0 +1,25 @@ +import {Platform} from 'react-native' + +export function web(value: any) { + return Platform.select({ + web: value, + }) +} + +export function ios(value: any) { + return Platform.select({ + ios: value, + }) +} + +export function android(value: any) { + return Platform.select({ + android: value, + }) +} + +export function native(value: any) { + return Platform.select({ + native: value, + }) +} diff --git a/src/alf/util/useColorModeTheme.ts b/src/alf/util/useColorModeTheme.ts new file mode 100644 index 000000000..79cebc139 --- /dev/null +++ b/src/alf/util/useColorModeTheme.ts @@ -0,0 +1,10 @@ +import {useColorScheme} from 'react-native' + +import * as persisted from '#/state/persisted' + +export function useColorModeTheme( + theme: persisted.Schema['colorMode'], +): 'light' | 'dark' { + const colorScheme = useColorScheme() + return (theme === 'system' ? colorScheme : theme) || 'light' +} diff --git a/src/lib/analytics/types.ts b/src/lib/analytics/types.ts index 5a24c360a..c84f7979a 100644 --- a/src/lib/analytics/types.ts +++ b/src/lib/analytics/types.ts @@ -147,6 +147,7 @@ interface ScreenPropertiesMap { Settings: {} AppPasswords: {} Moderation: {} + PreferencesExternalEmbeds: {} BlockedAccounts: {} MutedAccounts: {} SavedFeeds: {} diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts index a4391afb2..2314e2b95 100644 --- a/src/lib/api/feed/merge.ts +++ b/src/lib/api/feed/merge.ts @@ -98,7 +98,7 @@ export class MergeFeedAPI implements FeedAPI { } return { - cursor: posts.length ? String(this.itemCursor) : undefined, + cursor: String(this.itemCursor), feed: posts, } } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index aa5983be7..aec8338d0 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -41,7 +41,7 @@ export function IS_LOCAL_DEV(url: string) { } export function IS_STAGING(url: string) { - return !IS_LOCAL_DEV(url) && !IS_PROD(url) + return url.startsWith('https://staging.bsky.dev') } export function IS_PROD(url: string) { @@ -51,7 +51,8 @@ export function IS_PROD(url: string) { // -prf return ( url.startsWith('https://bsky.social') || - url.startsWith('https://api.bsky.app') + url.startsWith('https://api.bsky.app') || + /bsky\.network\/?$/.test(url) ) } @@ -116,8 +117,8 @@ export async function DEFAULT_FEEDS( } else { // production return { - pinned: [], - saved: [], + pinned: [PROD_DEFAULT_FEED('whats-hot')], + saved: [PROD_DEFAULT_FEED('whats-hot')], } } } diff --git a/src/lib/link-meta/link-meta.ts b/src/lib/link-meta/link-meta.ts index c17dee51f..c7c8d4130 100644 --- a/src/lib/link-meta/link-meta.ts +++ b/src/lib/link-meta/link-meta.ts @@ -2,6 +2,7 @@ import {BskyAgent} from '@atproto/api' import {isBskyAppUrl} from '../strings/url-helpers' import {extractBskyMeta} from './bsky' import {LINK_META_PROXY} from 'lib/constants' +import {getGiphyMetaUri} from 'lib/strings/embed-player' export enum LikelyType { HTML, @@ -34,6 +35,13 @@ export async function getLinkMeta( let urlp try { urlp = new URL(url) + + // Get Giphy meta uri if this is any form of giphy link + const giphyMetaUri = getGiphyMetaUri(urlp) + if (giphyMetaUri) { + url = giphyMetaUri + urlp = new URL(url) + } } catch (e) { return { error: 'Invalid URL', diff --git a/src/lib/media/manip.web.ts b/src/lib/media/manip.web.ts index 914b05d2e..bdf6836a1 100644 --- a/src/lib/media/manip.web.ts +++ b/src/lib/media/manip.web.ts @@ -117,9 +117,6 @@ function createResizedImage( return reject(new Error('Failed to resize image')) } - canvas.width = width - canvas.height = height - let scale = 1 if (mode === 'cover') { scale = img.width < img.height ? width / img.width : height / img.height @@ -128,10 +125,11 @@ function createResizedImage( } let w = img.width * scale let h = img.height * scale - let x = (width - w) / 2 - let y = (height - h) / 2 - ctx.drawImage(img, x, y, w, h) + canvas.width = w + canvas.height = h + + ctx.drawImage(img, 0, 0, w, h) resolve(canvas.toDataURL('image/jpeg', quality)) }) img.src = dataUri diff --git a/src/lib/media/picker.shared.ts b/src/lib/media/picker.shared.ts index 00b09c6b8..8bade34e2 100644 --- a/src/lib/media/picker.shared.ts +++ b/src/lib/media/picker.shared.ts @@ -4,6 +4,7 @@ import { MediaTypeOptions, } from 'expo-image-picker' import {getDataUriSize} from './util' +import * as Toast from 'view/com/util/Toast' export async function openPicker(opts?: ImagePickerOptions) { const response = await launchImageLibraryAsync({ @@ -13,7 +14,11 @@ export async function openPicker(opts?: ImagePickerOptions) { ...opts, }) - return (response.assets ?? []).map(image => ({ + if (response.assets && response.assets.length > 4) { + Toast.show('You may only select up to 4 images') + } + + return (response.assets ?? []).slice(0, 4).map(image => ({ mime: 'image/jpeg', height: image.height, width: image.width, diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index c157c0ab3..90ae75830 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -32,6 +32,7 @@ export type CommonNavigatorParams = { SavedFeeds: undefined PreferencesHomeFeed: undefined PreferencesThreads: undefined + PreferencesExternalEmbeds: undefined } export type BottomTabNavigatorParams = CommonNavigatorParams & { diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts index ec996dfa5..0f97eb080 100644 --- a/src/lib/strings/embed-player.ts +++ b/src/lib/strings/embed-player.ts @@ -1,17 +1,59 @@ -import {Platform} from 'react-native' - -export type EmbedPlayerParams = - | {type: 'youtube_video'; videoId: string; playerUri: string} - | {type: 'twitch_live'; channelId: string; playerUri: string} - | {type: 'spotify_album'; albumId: string; playerUri: string} - | { - type: 'spotify_playlist' - playlistId: string - playerUri: string - } - | {type: 'spotify_song'; songId: string; playerUri: string} - | {type: 'soundcloud_track'; user: string; track: string; playerUri: string} - | {type: 'soundcloud_set'; user: string; set: string; playerUri: string} +import {Dimensions, Platform} from 'react-native' +const {height: SCREEN_HEIGHT} = Dimensions.get('window') + +export const embedPlayerSources = [ + 'youtube', + 'youtubeShorts', + 'twitch', + 'spotify', + 'soundcloud', + 'appleMusic', + 'vimeo', + 'giphy', + 'tenor', +] as const + +export type EmbedPlayerSource = (typeof embedPlayerSources)[number] + +export type EmbedPlayerType = + | 'youtube_video' + | 'youtube_short' + | 'twitch_video' + | 'spotify_album' + | 'spotify_playlist' + | 'spotify_song' + | 'soundcloud_track' + | 'soundcloud_set' + | 'apple_music_playlist' + | 'apple_music_album' + | 'apple_music_song' + | 'vimeo_video' + | 'giphy_gif' + | 'tenor_gif' + +export const externalEmbedLabels: Record<EmbedPlayerSource, string> = { + youtube: 'YouTube', + youtubeShorts: 'YouTube Shorts', + vimeo: 'Vimeo', + twitch: 'Twitch', + giphy: 'GIPHY', + tenor: 'Tenor', + spotify: 'Spotify', + appleMusic: 'Apple Music', + soundcloud: 'SoundCloud', +} + +export interface EmbedPlayerParams { + type: EmbedPlayerType + playerUri: string + isGif?: boolean + source: EmbedPlayerSource + metaUri?: string + hideDetails?: boolean +} + +const giphyRegex = /media(?:[0-4]\.giphy\.com|\.giphy\.com)/i +const gifFilenameRegex = /^(\S+)\.(webp|gif|mp4)$/i export function parseEmbedPlayerFromUrl( url: string, @@ -29,63 +71,88 @@ export function parseEmbedPlayerFromUrl( if (videoId) { return { type: 'youtube_video', - videoId, - playerUri: `https://www.youtube.com/embed/${videoId}?autoplay=1`, + source: 'youtube', + playerUri: `https://www.youtube.com/embed/${videoId}?autoplay=1&playsinline=1`, } } } - if (urlp.hostname === 'www.youtube.com' || urlp.hostname === 'youtube.com') { + if ( + urlp.hostname === 'www.youtube.com' || + urlp.hostname === 'youtube.com' || + urlp.hostname === 'm.youtube.com' + ) { const [_, page, shortVideoId] = urlp.pathname.split('/') const videoId = page === 'shorts' ? shortVideoId : (urlp.searchParams.get('v') as string) if (videoId) { return { - type: 'youtube_video', - videoId, - playerUri: `https://www.youtube.com/embed/${videoId}?autoplay=1`, + type: page === 'shorts' ? 'youtube_short' : 'youtube_video', + source: page === 'shorts' ? 'youtubeShorts' : 'youtube', + hideDetails: page === 'shorts' ? true : undefined, + playerUri: `https://www.youtube.com/embed/${videoId}?autoplay=1&playsinline=1`, } } } // twitch - if (urlp.hostname === 'twitch.tv' || urlp.hostname === 'www.twitch.tv') { + if ( + urlp.hostname === 'twitch.tv' || + urlp.hostname === 'www.twitch.tv' || + urlp.hostname === 'm.twitch.tv' + ) { const parent = Platform.OS === 'web' ? window.location.hostname : 'localhost' - const parts = urlp.pathname.split('/') - if (parts.length === 2 && parts[1]) { + const [_, channelOrVideo, clipOrId, id] = urlp.pathname.split('/') + + if (channelOrVideo === 'videos') { + return { + type: 'twitch_video', + source: 'twitch', + playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&video=${clipOrId}&parent=${parent}`, + } + } else if (clipOrId === 'clip') { return { - type: 'twitch_live', - channelId: parts[1], - playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=${parts[1]}&parent=${parent}`, + type: 'twitch_video', + source: 'twitch', + playerUri: `https://clips.twitch.tv/embed?volume=0.5&autoplay=true&clip=${id}&parent=${parent}`, + } + } else if (channelOrVideo) { + return { + type: 'twitch_video', + source: 'twitch', + playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=${channelOrVideo}&parent=${parent}`, } } } // spotify if (urlp.hostname === 'open.spotify.com') { - const [_, type, id] = urlp.pathname.split('/') - if (type && id) { - if (type === 'playlist') { + const [_, typeOrLocale, idOrType, id] = urlp.pathname.split('/') + + if (idOrType) { + if (typeOrLocale === 'playlist' || idOrType === 'playlist') { return { type: 'spotify_playlist', - playlistId: id, - playerUri: `https://open.spotify.com/embed/playlist/${id}`, + source: 'spotify', + playerUri: `https://open.spotify.com/embed/playlist/${ + id ?? idOrType + }`, } } - if (type === 'album') { + if (typeOrLocale === 'album' || idOrType === 'album') { return { type: 'spotify_album', - albumId: id, - playerUri: `https://open.spotify.com/embed/album/${id}`, + source: 'spotify', + playerUri: `https://open.spotify.com/embed/album/${id ?? idOrType}`, } } - if (type === 'track') { + if (typeOrLocale === 'track' || idOrType === 'track') { return { type: 'spotify_song', - songId: id, - playerUri: `https://open.spotify.com/embed/track/${id}`, + source: 'spotify', + playerUri: `https://open.spotify.com/embed/track/${id ?? idOrType}`, } } } @@ -102,20 +169,173 @@ export function parseEmbedPlayerFromUrl( if (trackOrSets === 'sets' && set) { return { type: 'soundcloud_set', - user, - set: set, + source: 'soundcloud', playerUri: `https://w.soundcloud.com/player/?url=${url}&auto_play=true&visual=false&hide_related=true`, } } return { type: 'soundcloud_track', - user, - track: trackOrSets, + source: 'soundcloud', playerUri: `https://w.soundcloud.com/player/?url=${url}&auto_play=true&visual=false&hide_related=true`, } } } + + if ( + urlp.hostname === 'music.apple.com' || + urlp.hostname === 'music.apple.com' + ) { + // This should always have: locale, type (playlist or album), name, and id. We won't use spread since we want + // to check if the length is correct + const pathParams = urlp.pathname.split('/') + const type = pathParams[2] + const songId = urlp.searchParams.get('i') + + if (pathParams.length === 5 && (type === 'playlist' || type === 'album')) { + // We want to append the songId to the end of the url if it exists + const embedUri = `https://embed.music.apple.com${urlp.pathname}${ + urlp.search ? '?i=' + songId : '' + }` + + if (type === 'playlist') { + return { + type: 'apple_music_playlist', + source: 'appleMusic', + playerUri: embedUri, + } + } else if (type === 'album') { + if (songId) { + return { + type: 'apple_music_song', + source: 'appleMusic', + playerUri: embedUri, + } + } else { + return { + type: 'apple_music_album', + source: 'appleMusic', + playerUri: embedUri, + } + } + } + } + } + + if (urlp.hostname === 'vimeo.com' || urlp.hostname === 'www.vimeo.com') { + const [_, videoId] = urlp.pathname.split('/') + if (videoId) { + return { + type: 'vimeo_video', + source: 'vimeo', + playerUri: `https://player.vimeo.com/video/${videoId}?autoplay=1`, + } + } + } + + if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') { + const [_, gifs, nameAndId] = urlp.pathname.split('/') + + /* + * nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name) + * We want to get the id of the gif, then direct to media.giphy.com/media/{id}/giphy.webp so we can + * use it in an <Image> component + */ + + if (gifs === 'gifs' && nameAndId) { + const gifId = nameAndId.split('-').pop() + + if (gifId) { + return { + type: 'giphy_gif', + source: 'giphy', + isGif: true, + hideDetails: true, + metaUri: `https://giphy.com/gifs/${gifId}`, + playerUri: `https://i.giphy.com/media/${gifId}/giphy.webp`, + } + } + } + } + + // There are five possible hostnames that also can be giphy urls: media.giphy.com and media0-4.giphy.com + // These can include (presumably) a tracking id in the path name, so we have to check for that as well + if (giphyRegex.test(urlp.hostname)) { + // We can link directly to the gif, if its a proper link + const [_, media, trackingOrId, idOrFilename, filename] = + urlp.pathname.split('/') + + if (media === 'media') { + if (idOrFilename && gifFilenameRegex.test(idOrFilename)) { + return { + type: 'giphy_gif', + source: 'giphy', + isGif: true, + hideDetails: true, + metaUri: `https://giphy.com/gifs/${trackingOrId}`, + playerUri: `https://i.giphy.com/media/${trackingOrId}/giphy.webp`, + } + } else if (filename && gifFilenameRegex.test(filename)) { + return { + type: 'giphy_gif', + source: 'giphy', + isGif: true, + hideDetails: true, + metaUri: `https://giphy.com/gifs/${idOrFilename}`, + playerUri: `https://i.giphy.com/media/${idOrFilename}/giphy.webp`, + } + } + } + } + + // Finally, we should see if it is a link to i.giphy.com. These links don't necessarily end in .gif but can also + // be .webp + if (urlp.hostname === 'i.giphy.com' || urlp.hostname === 'www.i.giphy.com') { + const [_, mediaOrFilename, filename] = urlp.pathname.split('/') + + if (mediaOrFilename === 'media' && filename) { + const gifId = filename.split('.')[0] + return { + type: 'giphy_gif', + source: 'giphy', + isGif: true, + hideDetails: true, + metaUri: `https://giphy.com/gifs/${gifId}`, + playerUri: `https://i.giphy.com/media/${gifId}/giphy.webp`, + } + } else if (mediaOrFilename) { + const gifId = mediaOrFilename.split('.')[0] + return { + type: 'giphy_gif', + source: 'giphy', + isGif: true, + hideDetails: true, + metaUri: `https://giphy.com/gifs/${gifId}`, + playerUri: `https://i.giphy.com/media/${ + mediaOrFilename.split('.')[0] + }/giphy.webp`, + } + } + } + + if (urlp.hostname === 'tenor.com' || urlp.hostname === 'www.tenor.com') { + const [_, pathOrIntl, pathOrFilename, intlFilename] = + urlp.pathname.split('/') + const isIntl = pathOrFilename === 'view' + const filename = isIntl ? intlFilename : pathOrFilename + + if ((pathOrIntl === 'view' || pathOrFilename === 'view') && filename) { + const includesExt = filename.split('.').pop() === 'gif' + + return { + type: 'tenor_gif', + source: 'tenor', + isGif: true, + hideDetails: true, + playerUri: `${url}${!includesExt ? '.gif' : ''}`, + } + } + } } export function getPlayerHeight({ @@ -131,22 +351,53 @@ export function getPlayerHeight({ switch (type) { case 'youtube_video': - case 'twitch_live': + case 'twitch_video': + case 'vimeo_video': return (width / 16) * 9 + case 'youtube_short': + if (SCREEN_HEIGHT < 600) { + return ((width / 9) * 16) / 1.75 + } else { + return ((width / 9) * 16) / 1.5 + } case 'spotify_album': - return 380 + case 'apple_music_album': + case 'apple_music_playlist': case 'spotify_playlist': - return 360 + case 'soundcloud_set': + return 380 case 'spotify_song': if (width <= 300) { - return 180 + return 155 } return 232 case 'soundcloud_track': return 165 - case 'soundcloud_set': - return 360 + case 'apple_music_song': + return 150 default: return width } } + +export function getGifDims( + originalHeight: number, + originalWidth: number, + viewWidth: number, +) { + const scaledHeight = (originalHeight / originalWidth) * viewWidth + + return { + height: scaledHeight > 250 ? 250 : scaledHeight, + width: (250 / scaledHeight) * viewWidth, + } +} + +export function getGiphyMetaUri(url: URL) { + if (giphyRegex.test(url.hostname) || url.hostname === 'i.giphy.com') { + const params = parseEmbedPlayerFromUrl(url.toString()) + if (params && params.type === 'giphy_gif') { + return params.metaUri + } + } +} diff --git a/src/lib/styles.ts b/src/lib/styles.ts index 152e60eb0..5a10fea86 100644 --- a/src/lib/styles.ts +++ b/src/lib/styles.ts @@ -167,6 +167,7 @@ export const s = StyleSheet.create({ flexGrow1: {flexGrow: 1}, alignCenter: {alignItems: 'center'}, alignBaseline: {alignItems: 'baseline'}, + justifyCenter: {justifyContent: 'center'}, // position absolute: {position: 'absolute'}, diff --git a/src/lib/themes.ts b/src/lib/themes.ts index b778d5b30..ad7574db6 100644 --- a/src/lib/themes.ts +++ b/src/lib/themes.ts @@ -25,6 +25,7 @@ export const defaultTheme: Theme = { postCtrl: '#71768A', brandText: '#0066FF', emptyStateIcon: '#B6B6C9', + borderLinkHover: '#cac1c1', }, primary: { background: colors.blue3, @@ -310,6 +311,7 @@ export const darkTheme: Theme = { postCtrl: '#707489', brandText: '#0085ff', emptyStateIcon: colors.gray4, + borderLinkHover: colors.gray5, }, primary: { ...defaultTheme.palette.primary, diff --git a/src/locale/__tests__/helpers.test.ts b/src/locale/__tests__/helpers.test.ts index d4028c643..15b420fde 100644 --- a/src/locale/__tests__/helpers.test.ts +++ b/src/locale/__tests__/helpers.test.ts @@ -5,6 +5,7 @@ import {AppLanguage} from '#/locale/languages' test('sanitizeAppLanguageSetting', () => { expect(sanitizeAppLanguageSetting('en')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('pt-BR')).toBe(AppLanguage.pt_BR) expect(sanitizeAppLanguageSetting('hi')).toBe(AppLanguage.hi) expect(sanitizeAppLanguageSetting('foo')).toBe(AppLanguage.en) expect(sanitizeAppLanguageSetting('en,foo')).toBe(AppLanguage.en) diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts index ef09e5e68..517e610bf 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -110,18 +110,24 @@ export function sanitizeAppLanguageSetting(appLanguage: string): AppLanguage { switch (lang) { case 'en': return AppLanguage.en - case 'hi': - return AppLanguage.hi - case 'ja': - return AppLanguage.ja - case 'fr': - return AppLanguage.fr // DISABLED until this translation is fixed -prf // case 'de': // return AppLanguage.de // DISABLED until this translation is more thoroughly reviewed -prf - // case 'es': - // return AppLanguage.es + case 'es': + return AppLanguage.es + case 'fr': + return AppLanguage.fr + case 'hi': + return AppLanguage.hi + case 'ja': + return AppLanguage.ja + case 'ko': + return AppLanguage.ko + case 'pt-BR': + return AppLanguage.pt_BR + case 'uk': + return AppLanguage.uk default: continue } diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts index 164fce9fc..9e9b578c7 100644 --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -3,13 +3,15 @@ import {i18n} from '@lingui/core' import {useLanguagePrefs} from '#/state/preferences' import {messages as messagesEn} from '#/locale/locales/en/messages' -import {messages as messagesHi} from '#/locale/locales/hi/messages' -import {messages as messagesJa} from '#/locale/locales/ja/messages' -import {messages as messagesFr} from '#/locale/locales/fr/messages' // DISABLED until this translation is fixed -prf // import {messages as messagesDe} from '#/locale/locales/de/messages' -// DISABLED until this translation is more thoroughly reviewed -prf -// import {messages as messagesEs} from '#/locale/locales/es/messages' +import {messages as messagesEs} from '#/locale/locales/es/messages' +import {messages as messagesFr} from '#/locale/locales/fr/messages' +import {messages as messagesHi} from '#/locale/locales/hi/messages' +import {messages as messagesJa} from '#/locale/locales/ja/messages' +import {messages as messagesKo} from '#/locale/locales/ko/messages' +import {messages as messagesPt_BR} from '#/locale/locales/pt-BR/messages' +import {messages as messagesUk} from '#/locale/locales/uk/messages' import {sanitizeAppLanguageSetting} from '#/locale/helpers' import {AppLanguage} from '#/locale/languages' @@ -19,6 +21,19 @@ import {AppLanguage} from '#/locale/languages' */ export async function dynamicActivate(locale: AppLanguage) { switch (locale) { + // DISABLED until this translation is fixed -prf + // case AppLanguage.de: { + // i18n.loadAndActivate({locale, messages: messagesDe}) + // break + // } + case AppLanguage.es: { + i18n.loadAndActivate({locale, messages: messagesEs}) + break + } + case AppLanguage.fr: { + i18n.loadAndActivate({locale, messages: messagesFr}) + break + } case AppLanguage.hi: { i18n.loadAndActivate({locale, messages: messagesHi}) break @@ -27,20 +42,18 @@ export async function dynamicActivate(locale: AppLanguage) { i18n.loadAndActivate({locale, messages: messagesJa}) break } - case AppLanguage.fr: { - i18n.loadAndActivate({locale, messages: messagesFr}) + case AppLanguage.ko: { + i18n.loadAndActivate({locale, messages: messagesKo}) + break + } + case AppLanguage.pt_BR: { + i18n.loadAndActivate({locale, messages: messagesPt_BR}) + break + } + case AppLanguage.uk: { + i18n.loadAndActivate({locale, messages: messagesUk}) break } - // DISABLED until this translation is fixed -prf - // case AppLanguage.de: { - // i18n.loadAndActivate({locale, messages: messagesDe}) - // break - // } - // DISABLED until this translation is more thoroughly reviewed -prf - // case AppLanguage.es: { - // i18n.loadAndActivate({locale, messages: messagesEs}) - // break - // } default: { i18n.loadAndActivate({locale, messages: messagesEn}) break diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts index bf6f6e196..1fb9c2d70 100644 --- a/src/locale/i18n.web.ts +++ b/src/locale/i18n.web.ts @@ -12,6 +12,19 @@ export async function dynamicActivate(locale: AppLanguage) { let mod: any switch (locale) { + // DISABLED until this translation is fixed -prf + // case AppLanguage.de: { + // mod = await import(`./locales/de/messages`) + // break + // } + case AppLanguage.es: { + mod = await import(`./locales/es/messages`) + break + } + case AppLanguage.fr: { + mod = await import(`./locales/fr/messages`) + break + } case AppLanguage.hi: { mod = await import(`./locales/hi/messages`) break @@ -20,20 +33,18 @@ export async function dynamicActivate(locale: AppLanguage) { mod = await import(`./locales/ja/messages`) break } - case AppLanguage.fr: { - mod = await import(`./locales/fr/messages`) + case AppLanguage.ko: { + mod = await import(`./locales/ko/messages`) + break + } + case AppLanguage.pt_BR: { + mod = await import(`./locales/pt-BR/messages`) + break + } + case AppLanguage.uk: { + mod = await import(`./locales/uk/messages`) break } - // DISABLED until this translation is fixed -prf - // case AppLanguage.de: { - // mod = await import(`./locales/de/messages`) - // break - // } - // DISABLED until this translation is more thoroughly reviewed -prf - // case AppLanguage.es: { - // mod = await import(`./locales/es/messages`) - // break - // } default: { mod = await import(`./locales/en/messages`) break diff --git a/src/locale/languages.ts b/src/locale/languages.ts index d7559b578..6514bf92c 100644 --- a/src/locale/languages.ts +++ b/src/locale/languages.ts @@ -6,13 +6,15 @@ interface Language { export enum AppLanguage { en = 'en', - hi = 'hi', - ja = 'ja', - fr = 'fr', // DISABLED until this translation is fixed -prf // de = 'de', - // DISABLED until this translation is more thoroughly reviewed -prf - // es = 'es', + es = 'es', + fr = 'fr', + hi = 'hi', + ja = 'ja', + ko = 'ko', + pt_BR = 'pt-BR', + uk = 'uk', } interface AppLanguageConfig { @@ -22,13 +24,15 @@ interface AppLanguageConfig { export const APP_LANGUAGES: AppLanguageConfig[] = [ {code2: AppLanguage.en, name: 'English'}, - {code2: AppLanguage.hi, name: 'हिंदी'}, - {code2: AppLanguage.ja, name: '日本語'}, - {code2: AppLanguage.fr, name: 'Français'}, // DISABLED until this translation is fixed -prf // {code2: AppLanguage.de, name: 'Deutsch'}, - // DISABLED until this translation is more thoroughly reviewed -prf - // {code2: AppLanguage.es, name: 'Español'}, + {code2: AppLanguage.es, name: 'Español'}, + {code2: AppLanguage.fr, name: 'Français'}, + {code2: AppLanguage.hi, name: 'हिंदी'}, + {code2: AppLanguage.ja, name: '日本語'}, + {code2: AppLanguage.ko, name: '한êµì–´'}, + {code2: AppLanguage.pt_BR, name: 'Português (BR)'}, + {code2: AppLanguage.uk, name: 'УкраїнÑька'}, ] export const LANGUAGES: Language[] = [ diff --git a/src/locale/locales/de/messages.po b/src/locale/locales/de/messages.po index b2f65b2ae..4926b30ae 100644 --- a/src/locale/locales/de/messages.po +++ b/src/locale/locales/de/messages.po @@ -68,7 +68,7 @@ msgstr "Eine neue Version der App ist verfügbar. Bitte aktualisieren Sie die Ap msgid "Accessibility" msgstr "Zugänglichkeit" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "Konto" @@ -98,6 +98,7 @@ msgstr "Konto hinzufügen" #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "Alt Text hinzufügen" @@ -110,11 +111,11 @@ msgstr "Einzelheiten hinzufügen" msgid "Add details to report" msgstr "Einzelheiten zum Bericht hinzufügen" -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" msgstr "Link Karte hinzufügen" -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" msgstr "Link Karte hinzufügen:" @@ -135,7 +136,7 @@ msgstr "Zu meinen Feeds hinzufügen" msgid "Added to list" msgstr "Den Listen hinzufügen" -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "Passen Sie die Anzahl der Likes an, die eine Antwort haben muss, um in Ihrem Feed angezeigt zu werden." @@ -143,7 +144,7 @@ msgstr "Passen Sie die Anzahl der Likes an, die eine Antwort haben muss, um in I msgid "Adult Content" msgstr "Inhalt für Erwachsene" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "Fortgeschrittene" @@ -176,7 +177,7 @@ msgstr "und" msgid "App Language" msgstr "App Sprache" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" msgstr "App-Passwörter" @@ -212,7 +213,7 @@ msgstr "Aussehen" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "Sind Sie sicher, dass Sie das App-Passwort \"{name}\" löschen möchten?" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "Sind Sie sicher, dass Sie diesen Entwurf verwerfen möchten?" @@ -231,7 +232,7 @@ msgstr "Künstlerische oder nicht-erotische Nacktheit." #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -327,7 +328,7 @@ msgstr "Bluesky wird dein Profil und deine Beiträge nicht für abgemeldete Benu msgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "Version bauen {0} {1}" @@ -345,9 +346,8 @@ msgstr "Kamera" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "Darf nur Buchstaben, Zahlen, Leerzeichen, Bindestriche und Unterstriche enthalten. Muss mindestens 4 Zeichen lang sein, darf aber nicht länger als 32 Zeichen sein." -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -371,8 +371,8 @@ msgid "Cancel account deletion" msgstr "Kontolöschung abbrechen" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "Abbrechen Bild-Alt-Text hinzufügen" +#~ msgid "Cancel add image alt text" +#~ msgstr "Abbrechen Bild-Alt-Text hinzufügen" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" @@ -403,8 +403,8 @@ msgstr "Anmeldung zur Warteliste abbrechen" msgid "Change" msgstr "Ändern" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" msgstr "Änderungsgriff andern" @@ -448,19 +448,19 @@ msgstr "Wählen Sie die Algorithmen, die Ihr Erlebnis mit benutzerdefinierten Fe msgid "Choose your password" msgstr "Wählen Sie Ihr Passwort" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "Alle alten Speicherdaten löschen" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "Alle alten Speicherdaten löschen (danach neu starten)" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "Alle alten Speicherdaten löschen" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "Alle alten Speicherdaten löschen (danach neu starten)" @@ -501,8 +501,8 @@ msgstr "Antwort zusammenstellen" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "Bestätigen" @@ -526,7 +526,7 @@ msgid "Confirmation code" msgstr "Bestätigungscode" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." msgstr "Verbinden..." @@ -616,11 +616,15 @@ msgstr "Erstellt {0}" msgid "Custom domain" msgstr "Benutzerdefinierter Bereich" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "Gefahrenzone" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" msgstr "Konto löschen" @@ -642,7 +646,7 @@ msgstr "Liste löschen" msgid "Delete my account" msgstr "Mein Konto löschen" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" msgstr "Mein Konto löschen..." @@ -669,19 +673,19 @@ msgstr "Beschreibung" msgid "Dev Server" msgstr "Entwicklungs-Server" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" msgstr "Werkzeuge für Entwickler" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" msgstr "" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "Verwerfen" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" msgstr "Verwerfen" @@ -706,6 +710,7 @@ msgid "Domain verified!" msgstr "Domain geprüft!" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -715,8 +720,8 @@ msgstr "Domain geprüft!" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "Erledigt" @@ -777,7 +782,15 @@ msgstr "Email aktualiziert" msgid "Email:" msgstr "E-Mail:" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "Aktivieren Sie diese Einstellung, um nur Antworten zwischen Personen zu sehen, denen Sie folgen." @@ -821,6 +834,20 @@ msgstr "Alle" msgid "Expand alt text" msgstr "Alt-Text erweitern" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -868,7 +895,7 @@ msgstr "Benutzer mit der Suchfunktion auf der rechten Seite finden" msgid "Finding similar accounts..." msgstr "Suche nach ähnlichen Konten..." -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "Optimieren Sie die Inhalte, die Sie auf Ihrem Startbildschirm sehen." @@ -888,7 +915,7 @@ msgstr "Folgen Sie einigen Nutzern, um loszulegen. Wir können Ihnen weitere Nut msgid "Followed users" msgstr "Verfolgte Benutzer" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "Nur verfolgte Benutzer" @@ -917,11 +944,11 @@ msgstr "Aus Sicherheitsgründen müssen wir Ihnen einen Bestätigungscode an Ihr msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "Aus Sicherheitsgründen können Sie es nicht mehr einsehen. Wenn Sie dieses Passwort verlieren, müssen Sie ein neues generieren." -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "Vergessen" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "Passwort vergessen" @@ -953,7 +980,7 @@ msgid "Go Back" msgstr "Zurückgehen" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "Weiter zum nächsten" @@ -1016,7 +1043,7 @@ msgid "Home" msgstr "Startseite" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "Startseite Feed-Einstellungen" @@ -1051,7 +1078,7 @@ msgstr "Bild-Alt-Text" msgid "Image options" msgstr "Bild-Optionen" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "Ungültiger Benutzername oder Passwort" @@ -1256,6 +1283,10 @@ msgstr "Mehr Feeds " msgid "More options" msgstr "Mehr Optionen" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "Stummes Konto" @@ -1313,6 +1344,11 @@ msgstr "Meine gespeicherte Feeds " msgid "Name" msgstr "Namen" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "Verlieren Sie nie den Zugriff auf Ihre Follower und Daten." @@ -1336,10 +1372,14 @@ msgstr "Neuer Posten " msgid "New Post" msgstr "Neuer Posten " +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "" + #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1350,10 +1390,12 @@ msgstr "Nächster" msgid "Next image" msgstr "Nächstes Bild " -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "Nein" @@ -1378,6 +1420,10 @@ msgstr "Keine Ergebnisse gefunden für \"{query}\"" msgid "No results found for {query}" msgstr "Keine Ergebnisse gefunden für {query}" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "Niemand" @@ -1407,7 +1453,11 @@ msgstr "Ach nein!" msgid "Okay" msgstr "Okay" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "Bei einem oder mehreren Bildern fehlt der Alt-Text." @@ -1415,6 +1465,11 @@ msgstr "Bei einem oder mehreren Bildern fehlt der Alt-Text." msgid "Only {0} can reply." msgstr "Nur {0} kann antworten." +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "Offene Navigation" @@ -1423,6 +1478,10 @@ msgstr "Offene Navigation" msgid "Opens configurable language settings" msgstr "Öffnet die konfigurierbaren Spracheinstellungen" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1440,7 +1499,7 @@ msgstr "Öffnet die Moderationseinstellungen" msgid "Opens screen with all saved feeds" msgstr "Öffnet den Bildschirm mit allen gespeicherten Feeds" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "Öffnet die Einstellungsseite für das App-Passwort" @@ -1448,11 +1507,11 @@ msgstr "Öffnet die Einstellungsseite für das App-Passwort" msgid "Opens the home feed preferences" msgstr "Öffnet die Homefeed-Einstellungen" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "Öffnet die Märchenbuchseite" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "Öffnet die Systemprotokollseite" @@ -1483,7 +1542,7 @@ msgstr "Seite nicht gefunden" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1505,6 +1564,19 @@ msgstr "Bilder, die für Erwachsene gedacht sind." msgid "Pinned Feeds" msgstr "Angepinnte Feeds" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "Bitte wählen Sie Ihren Handgriff." @@ -1539,11 +1611,11 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "Bitte teilen Sie uns mit, warum diese Entscheidung Ihrer Meinung nach falsch war." -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" msgstr "" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" @@ -1581,16 +1653,17 @@ msgstr "Vorheriges Bild" msgid "Primary Language" msgstr "Primäre Sprache" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "Priorisieren Sie Ihre Anhängerschaft" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "Privatsphäre" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "Datenschutzbestimmungen" @@ -1607,7 +1680,7 @@ msgstr "Verarbeitung..." msgid "Profile" msgstr "Profile" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "Schützen Sie Ihr Konto, indem Sie Ihre E-Mail verifizieren." @@ -1628,6 +1701,10 @@ msgstr "Angebotsposten" msgid "Quote Post" msgstr "Angebotsposten" +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "" + #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" msgstr "Verhältnisse" @@ -1695,7 +1772,7 @@ msgstr "Antworten" msgid "Replies to this thread are disabled" msgstr "Antworten auf diesen Thread sind deaktiviert" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "Antwort-Filter" @@ -1738,6 +1815,10 @@ msgstr "Nachgetragen von" msgid "Request Change" msgstr "Änderung beantragen" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "" + #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "Für diesen Anbieter erforderlich" @@ -1746,7 +1827,7 @@ msgstr "Für diesen Anbieter erforderlich" msgid "Reset code" msgstr "Code zurücksetzen" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "Onboarding-Status zurücksetzen" @@ -1754,28 +1835,27 @@ msgstr "Onboarding-Status zurücksetzen" msgid "Reset password" msgstr "Passwort zurücksetzen" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "Einstellungen zurücksetzen" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "Onboarding-Status zurücksetzen" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "Setzt den Zustand der Einstellungen zurück" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" msgstr "Wiederholung" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1839,7 +1919,7 @@ msgstr "Wählen Sie Bluesky Social" msgid "Select from an existing account" msgstr "Aus einem bestehenden Konto auswählen" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "Dienst auswählen" @@ -1880,23 +1960,23 @@ msgstr "Bericht senden" msgid "Set new password" msgstr "Neues Passwort festlegen" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." msgstr "Setzen Sie diese Einstellung auf \"Nein\", um alle zitierten Beiträge aus Ihrem Feed auszublenden. Neu eingestellte Beiträge sind weiterhin sichtbar." -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." msgstr "Setzen Sie diese Einstellung auf \"Nein\", um alle Antworten aus Ihrem Feed auszublenden." -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." msgstr "Setzen Sie diese Einstellung auf \"Nein\", um alle wieder geposteten Beiträge aus Ihrem Feed auszublenden." -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "Setzen Sie diese Einstellung auf \"Ja\", um Antworten in einer Thread-Ansicht anzuzeigen. Dies ist eine experimentelle Funktion." -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." msgstr "Setzen Sie diese Einstellung auf \"Ja\", um Beispiele für Ihre gespeicherten Feeds in Ihrem folgenden Feed anzuzeigen. Dies ist eine experimentelle Funktion." @@ -1930,23 +2010,27 @@ msgstr "Zeigen" msgid "Show anyway" msgstr "Trotzdem anzeigen" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" msgstr "Beiträge von My Feeds anzeigen" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" msgstr "Angebotsposten zeigen" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" msgstr "Antworten zeigen" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "Antworten von Personen, denen Sie folgen, vor allen anderen Antworten anzeigen." -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" msgstr "Wiederholungen anzeigen" @@ -1983,7 +2067,7 @@ msgstr "Eintragen als {0}" msgid "Sign in as..." msgstr "Eintragen als..." -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "Anmelden" @@ -2037,11 +2121,11 @@ msgstr "Platz" msgid "Staging" msgstr "Aufführung" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "Status-Seite" -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "Märchenbuch" @@ -2070,7 +2154,7 @@ msgstr "Unterstützung" msgid "Switch Account" msgstr "Konto wechseln" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "System-Protokoll" @@ -2082,7 +2166,7 @@ msgstr "Groß" msgid "Terms" msgstr "Bedingungen" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2137,6 +2221,10 @@ msgstr "Diese {screenDescription} wurde markiert:" msgid "This account has requested that users sign in to view their profile." msgstr "Dieses Konto hat die Benutzer aufgefordert, sich anzumelden, um ihr Profil zu sehen." +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "Dieser Inhalt kann ohne Bluesky-Konto nicht angezeigt werden." @@ -2178,7 +2266,7 @@ msgstr "" msgid "Thread Preferences" msgstr "Einstellungen zum Thema" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "Gewindemodus" @@ -2210,7 +2298,7 @@ msgstr "Stummschaltliste aufheben" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "Sie können Ihren Dienst nicht kontaktieren. Bitte überprüfen Sie Ihre Internetverbindung." @@ -2228,7 +2316,7 @@ msgstr "Konto freischalten" msgid "Undo repost" msgstr "Umbuchung rückgängig machen" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "Leider erfüllen Sie nicht die Voraussetzungen, um ein Konto zu erstellen." @@ -2284,8 +2372,8 @@ msgstr "Benutzerhandgriff" msgid "User Lists" msgstr "Benutzer Liste" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "Benutzername oder E-Mail Adresse" @@ -2301,15 +2389,15 @@ msgstr "Benutzer gefolgt von <0/>" msgid "Users in \"{0}\"" msgstr "Benutzer in \"{0}\"" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" msgstr "E-Mail überprüfen" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "E-Mail überprüfen" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "E-Mail überprüfen" @@ -2375,7 +2463,7 @@ msgstr "Wer kann antworten." msgid "Wide" msgstr "Breit" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" msgstr "Posten schreiben" @@ -2383,10 +2471,12 @@ msgstr "Posten schreiben" msgid "Write your reply" msgstr "Schreiben Sie Ihre Antwort" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "Ja" diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index d1982e580..3e2b776fa 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -88,7 +88,7 @@ msgstr "" msgid "Accessibility" msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "" @@ -118,6 +118,7 @@ msgstr "" #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "" @@ -130,11 +131,11 @@ msgstr "" msgid "Add details to report" msgstr "" -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" msgstr "" -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" msgstr "" @@ -155,7 +156,7 @@ msgstr "" msgid "Added to list" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "" @@ -163,7 +164,7 @@ msgstr "" msgid "Adult Content" msgstr "" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "" @@ -196,7 +197,7 @@ msgstr "" msgid "App Language" msgstr "" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" msgstr "" @@ -236,7 +237,7 @@ msgstr "" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "" @@ -259,7 +260,7 @@ msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -355,7 +356,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "" @@ -373,9 +374,8 @@ msgstr "" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "" -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -399,8 +399,8 @@ msgid "Cancel account deletion" msgstr "" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "" +#~ msgid "Cancel add image alt text" +#~ msgstr "" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" @@ -431,8 +431,8 @@ msgstr "" msgid "Change" msgstr "" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" msgstr "" @@ -480,19 +480,19 @@ msgstr "" msgid "Choose your password" msgstr "" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "" @@ -533,8 +533,8 @@ msgstr "" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "" @@ -558,7 +558,7 @@ msgid "Confirmation code" msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." msgstr "" @@ -648,7 +648,11 @@ msgstr "" msgid "Custom domain" msgstr "" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "" @@ -656,7 +660,7 @@ msgstr "" #~ msgid "Dark" #~ msgstr "" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" msgstr "" @@ -678,7 +682,7 @@ msgstr "" msgid "Delete my account" msgstr "" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" msgstr "" @@ -705,19 +709,19 @@ msgstr "" msgid "Dev Server" msgstr "" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" msgstr "" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" msgstr "" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" msgstr "" @@ -742,6 +746,7 @@ msgid "Domain verified!" msgstr "" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -751,8 +756,8 @@ msgstr "" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "" @@ -813,7 +818,15 @@ msgstr "" msgid "Email:" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "" @@ -857,6 +870,20 @@ msgstr "" msgid "Expand alt text" msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -904,7 +931,7 @@ msgstr "" msgid "Finding similar accounts..." msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "" @@ -928,7 +955,7 @@ msgstr "" msgid "Followed users" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "" @@ -957,11 +984,11 @@ msgstr "" msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "" @@ -993,7 +1020,7 @@ msgid "Go Back" msgstr "" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "" @@ -1064,7 +1091,7 @@ msgid "Home" msgstr "" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "" @@ -1104,7 +1131,7 @@ msgstr "" #~ msgid "In Your Network" #~ msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "" @@ -1329,6 +1356,10 @@ msgstr "" #~ msgid "More post options" #~ msgstr "" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "" @@ -1390,6 +1421,11 @@ msgstr "" msgid "Name" msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "" @@ -1413,10 +1449,14 @@ msgstr "" msgid "New Post" msgstr "" +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "" + #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1427,10 +1467,12 @@ msgstr "" msgid "Next image" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "" @@ -1460,6 +1502,10 @@ msgstr "" msgid "No results found for {query}" msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "" @@ -1501,7 +1547,11 @@ msgstr "" msgid "Okay" msgstr "" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "" @@ -1509,6 +1559,11 @@ msgstr "" msgid "Only {0} can reply." msgstr "" +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "" @@ -1517,6 +1572,10 @@ msgstr "" msgid "Opens configurable language settings" msgstr "" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1534,7 +1593,7 @@ msgstr "" msgid "Opens screen with all saved feeds" msgstr "" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "" @@ -1542,11 +1601,11 @@ msgstr "" msgid "Opens the home feed preferences" msgstr "" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "" @@ -1577,7 +1636,7 @@ msgstr "" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1599,6 +1658,19 @@ msgstr "" msgid "Pinned Feeds" msgstr "" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "" @@ -1633,11 +1705,11 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "" -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" msgstr "" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" @@ -1675,16 +1747,17 @@ msgstr "" msgid "Primary Language" msgstr "" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "" @@ -1701,7 +1774,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "" @@ -1722,6 +1795,10 @@ msgstr "" msgid "Quote Post" msgstr "" +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "" + #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" msgstr "" @@ -1794,7 +1871,7 @@ msgstr "" msgid "Replies to this thread are disabled" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "" @@ -1841,9 +1918,9 @@ msgstr "" #~ msgid "Request to limit the visibility of my account" #~ msgstr "" -#: src/view/screens/Settings.tsx:382 -#~ msgid "Require alt text before posting" -#~ msgstr "" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "" #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" @@ -1853,7 +1930,7 @@ msgstr "" msgid "Reset code" msgstr "" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "" @@ -1861,22 +1938,22 @@ msgstr "" msgid "Reset password" msgstr "" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" @@ -1886,7 +1963,6 @@ msgstr "" #~ msgid "Retry change handle" #~ msgstr "" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1958,7 +2034,7 @@ msgstr "" msgid "Select from an existing account" msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "" @@ -1999,23 +2075,23 @@ msgstr "" msgid "Set new password" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." msgstr "" -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." msgstr "" @@ -2053,23 +2129,27 @@ msgstr "" msgid "Show anyway" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" msgstr "" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" msgstr "" @@ -2106,7 +2186,7 @@ msgstr "" msgid "Sign in as..." msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "" @@ -2160,11 +2240,11 @@ msgstr "" msgid "Staging" msgstr "" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "" -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "" @@ -2197,7 +2277,7 @@ msgstr "" #~ msgid "System" #~ msgstr "" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "" @@ -2209,7 +2289,7 @@ msgstr "" msgid "Terms" msgstr "" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2264,6 +2344,10 @@ msgstr "" msgid "This account has requested that users sign in to view their profile." msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "" @@ -2305,7 +2389,7 @@ msgstr "" msgid "Thread Preferences" msgstr "" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "" @@ -2337,7 +2421,7 @@ msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "" @@ -2355,7 +2439,7 @@ msgstr "" msgid "Undo repost" msgstr "" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "" @@ -2411,8 +2495,8 @@ msgstr "" msgid "User Lists" msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "" @@ -2432,15 +2516,15 @@ msgstr "" msgid "Users in \"{0}\"" msgstr "" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "" @@ -2514,7 +2598,7 @@ msgstr "" msgid "Wide" msgstr "" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" msgstr "" @@ -2522,10 +2606,12 @@ msgstr "" msgid "Write your reply" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "" diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po index d2fd294bf..5ecee6966 100644 --- a/src/locale/locales/es/messages.po +++ b/src/locale/locales/es/messages.po @@ -15,7 +15,7 @@ msgstr "" #: src/view/shell/desktop/RightNav.tsx:168 msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" +msgstr "{0, plural, one {# invite code available} other {# invite codes available}}" #: src/view/com/modals/Repost.tsx:44 msgid "{0}" @@ -27,7 +27,7 @@ msgstr "Lista {purposeLabel} {0}" #: src/view/shell/desktop/RightNav.tsx:151 msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" +msgstr "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" #: src/view/screens/Settings.tsx:407 #: src/view/shell/Drawer.tsx:659 @@ -57,7 +57,7 @@ msgstr "<0>Sigue a algunos</0><1>usuarios</1><2>recomendados</2>" #: src/view/com/util/moderation/LabelInfo.tsx:45 msgid "A content warning has been applied to this {0}." -msgstr "" +msgstr "Se ha aplicado una advertencia de contenido a este {0}." #: src/lib/hooks/useOTAUpdate.ts:16 msgid "A new version of the app is available. Please update to continue using the app." @@ -68,7 +68,7 @@ msgstr "Ya está disponible una nueva versión de la aplicación. ActualÃzala p msgid "Accessibility" msgstr "Accesibilidad" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "Cuenta" @@ -98,6 +98,7 @@ msgstr "Agregar una cuenta" #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "Agregar texto alt" @@ -110,11 +111,11 @@ msgstr "Agregar detalles" msgid "Add details to report" msgstr "Agregar detalles al informe" -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" msgstr "Agregar una tarjeta de enlace" -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" msgstr "Agregar una tarjeta de enlace:" @@ -135,7 +136,7 @@ msgstr "Agregar a mis noticias" msgid "Added to list" msgstr "Agregar a una lista" -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "Ajusta el número de Me gusta que debe tener una respuesta para que se muestre en tus noticias." @@ -143,7 +144,7 @@ msgstr "Ajusta el número de Me gusta que debe tener una respuesta para que se m msgid "Adult Content" msgstr "Contenido para adultos" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "Avanzado" @@ -176,7 +177,7 @@ msgstr "y" msgid "App Language" msgstr "Lenguaje de app" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" msgstr "Contraseñas de la app" @@ -186,15 +187,11 @@ msgstr "Contraseñas de la app" #: src/view/com/util/forms/PostDropdownBtn.tsx:236 msgid "Appeal content warning" -msgstr "" +msgstr "Aviso sobre el contenido del recurso" #: src/view/com/modals/AppealLabel.tsx:65 msgid "Appeal Content Warning" -msgstr "" - -#: src/view/com/modals/AppealLabel.tsx:65 -#~ msgid "Appeal Decision" -#~ msgstr "Decisión de apelación" +msgstr "Aviso sobre el Contenido del Recurso" #: src/view/com/util/moderation/LabelInfo.tsx:52 msgid "Appeal this decision" @@ -212,7 +209,7 @@ msgstr "Aspecto exterior" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "¿Estás seguro de que quieres eliminar la contraseña de la app \"{name}\"?" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "¿Estás seguro de que quieres descartar este borrador?" @@ -222,7 +219,7 @@ msgstr "¿Estás seguro?" #: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." -msgstr "¿Estás seguro? Esto no puede deshacerse," +msgstr "¿Estás seguro? Esto no puede deshacerse." #: src/view/com/modals/SelfLabel.tsx:123 msgid "Artistic or non-erotic nudity." @@ -231,7 +228,7 @@ msgstr "Desnudez artÃstica o no erótica." #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -289,7 +286,7 @@ msgstr "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni #: src/view/com/post-thread/PostThread.tsx:250 msgid "Blocked post." -msgstr "Publicación bloqueada" +msgstr "Publicación bloqueada." #: src/view/screens/ProfileList.tsx:310 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." @@ -327,7 +324,7 @@ msgstr "Bluesky no mostrará tu perfil ni tus publicaciones a los usuarios que h msgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "Versión {0} {1}" @@ -345,9 +342,8 @@ msgstr "Cámara" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "Sólo puede contener letras, números, espacios, guiones y guiones bajos. Debe tener al menos 4 caracteres, pero no más de 32." -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -371,8 +367,8 @@ msgid "Cancel account deletion" msgstr "Cancelar la eliminación de la cuenta" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "Cancelar añadir texto alternativo a la imagen" +#~ msgid "Cancel add image alt text" +#~ msgstr "Cancelar añadir texto alternativo a la imagen" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" @@ -403,8 +399,8 @@ msgstr "Cancelar la inscripción en la lista de espera" msgid "Change" msgstr "Cambiar" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" msgstr "Cambiar el identificador" @@ -448,19 +444,19 @@ msgstr "Elige los algoritmos que potencian tu experiencia con publicaciones pers msgid "Choose your password" msgstr "Elige tu contraseña" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "Borrar todos los datos de almacenamiento heredados" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "Borrar todos los datos de almacenamiento heredados (reiniciar después de esto)" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "Borrar todos los datos de almacenamiento" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "Borrar todos los datos de almacenamiento (reiniciar después de esto)" @@ -501,8 +497,8 @@ msgstr "Redactar la respuesta" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "Confirmar" @@ -526,7 +522,7 @@ msgid "Confirmation code" msgstr "Código de confirmación" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." msgstr "Conectando..." @@ -616,11 +612,15 @@ msgstr "Creado {0}" msgid "Custom domain" msgstr "Dominio personalizado" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "Zona de peligro" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" msgstr "Borrar la cuenta" @@ -642,7 +642,7 @@ msgstr "Borrar la lista" msgid "Delete my account" msgstr "Borrar mi cuenta" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" msgstr "Borrar mi cuenta..." @@ -669,19 +669,19 @@ msgstr "Descripción" msgid "Dev Server" msgstr "Servidor de desarrollo" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" msgstr "Herramientas de desarrollador" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" -msgstr "" +msgstr "¿Quieres decir algo?" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "Descartar" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" msgstr "Descartar el borrador" @@ -706,6 +706,7 @@ msgid "Domain verified!" msgstr "¡Dominio verificado!" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -715,8 +716,8 @@ msgstr "¡Dominio verificado!" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "Listo" @@ -777,7 +778,15 @@ msgstr "Correo electrónico actualizado" msgid "Email:" msgstr "Correo electrónico:" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "Activa esta opción para ver sólo las respuestas de las personas a las que sigues." @@ -821,6 +830,20 @@ msgstr "Todos" msgid "Expand alt text" msgstr "Expandir el texto alt" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -868,7 +891,7 @@ msgstr "Encuentra usuarios con la herramienta de búsqueda de la derecha" msgid "Finding similar accounts..." msgstr "Encontrar cuentas similares..." -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "Ajusta el contenido que ves en tu pantalla de inicio." @@ -888,7 +911,7 @@ msgstr "Sigue a algunos usuarios para empezar. Podemos recomendarte más usuario msgid "Followed users" msgstr "Usuarios seguidos" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "Solo usuarios seguidos" @@ -917,11 +940,11 @@ msgstr "Por razones de seguridad, tendremos que enviarte un código de confirmac msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "Por razones de seguridad, no podrás volver a verla. Si pierdes esta contraseña, tendrás que generar una nueva." -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "Lo olvidé" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "Olvidé mi contraseña" @@ -953,7 +976,7 @@ msgid "Go Back" msgstr "Regresar" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "Ir al siguiente" @@ -978,11 +1001,11 @@ msgstr "Ocultar" #: src/view/com/util/forms/PostDropdownBtn.tsx:173 msgid "Hide post" -msgstr "" +msgstr "Ocultar publicación" #: src/view/com/util/forms/PostDropdownBtn.tsx:177 msgid "Hide this post?" -msgstr "" +msgstr "¿Ocultar esta publicación?" #: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" @@ -1016,7 +1039,7 @@ msgid "Home" msgstr "Página inicial" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "Preferencias de noticias de la página inicial" @@ -1051,7 +1074,7 @@ msgstr "Texto alt de la imagen" msgid "Image options" msgstr "Opciones de la imagen" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "Nombre de usuario o contraseña no válidos" @@ -1202,10 +1225,6 @@ msgstr "Visibilidad de desconexión" msgid "Login to account that is not listed" msgstr "Acceder a una cuenta que no está en la lista" -#: src/view/screens/ProfileFeed.tsx:472 -#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" -#~ msgstr "Parece que este canal de noticias sólo está disponible para usuarios con una cuenta Bluesky. Por favor, ¡regÃstrate o inicia sesión para ver este canal!" - #: src/view/com/modals/LinkWarning.tsx:63 msgid "Make sure this is where you intend to go!" msgstr "¡Asegúrate de que es aquà a donde pretendes ir!" @@ -1256,6 +1275,10 @@ msgstr "Más canales de noticias" msgid "More options" msgstr "Más opciones" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "Silenciar la cuenta" @@ -1313,6 +1336,11 @@ msgstr "Mis canales de noticias guardados" msgid "Name" msgstr "Nombre" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "No pierdas nunca el acceso a tus seguidores y datos." @@ -1336,10 +1364,14 @@ msgstr "Publicación nueva" msgid "New Post" msgstr "Publicación nueva" +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "" + #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1350,10 +1382,12 @@ msgstr "Siguiente" msgid "Next image" msgstr "Imagen nueva" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "No" @@ -1378,6 +1412,10 @@ msgstr "No se han encontrado resultados para \"{query}\"" msgid "No results found for {query}" msgstr "No se han encontrado resultados para {query}" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "Nadie" @@ -1407,7 +1445,11 @@ msgstr "¡Qué problema!" msgid "Okay" msgstr "Está bien" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "Falta el texto alternativo en una o varias imágenes." @@ -1415,6 +1457,11 @@ msgstr "Falta el texto alternativo en una o varias imágenes." msgid "Only {0} can reply." msgstr "Solo {0} puede responder." +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "Abrir navegación" @@ -1423,6 +1470,10 @@ msgstr "Abrir navegación" msgid "Opens configurable language settings" msgstr "Abrir la configuración del idioma que se puede ajustar" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1440,7 +1491,7 @@ msgstr "Abre la configuración de moderación" msgid "Opens screen with all saved feeds" msgstr "Abre la pantalla con todas las noticias guardadas" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "Abre la página de configuración de la contraseña de la app" @@ -1448,11 +1499,11 @@ msgstr "Abre la página de configuración de la contraseña de la app" msgid "Opens the home feed preferences" msgstr "Abre las preferencias de noticias de la página inicial" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "Abre la página del libro de cuentos" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "Abre la página de la bitácora del sistema" @@ -1483,7 +1534,7 @@ msgstr "Página no encontrada" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1505,6 +1556,19 @@ msgstr "Imágenes destinadas a adultos." msgid "Pinned Feeds" msgstr "Canales de noticias anclados" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "Por favor, elige tu identificador." @@ -1532,18 +1596,13 @@ msgstr "Introduce tu contraseña, también:" #: src/view/com/modals/AppealLabel.tsx:72 #: src/view/com/modals/AppealLabel.tsx:75 msgid "Please tell us why you think this content warning was incorrectly applied!" -msgstr "" - -#: src/view/com/modals/AppealLabel.tsx:72 -#: src/view/com/modals/AppealLabel.tsx:75 -#~ msgid "Please tell us why you think this decision was incorrect." -#~ msgstr "Por favor, dinos por qué crees que esta decisión fue incorrecta." +msgstr "Por favor, dinos por qué crees que esta advertencia de contenido se ha aplicado incorrectamente!" -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" -msgstr "" +msgstr "Por favor, espera a que tu tarjeta de enlace termine de cargarse" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" @@ -1581,16 +1640,17 @@ msgstr "Imagen previa" msgid "Primary Language" msgstr "Lenguajes primarios" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "Priorizar los usuarios a los que sigue" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "Privacidad" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "PolÃtica de privacidad" @@ -1607,7 +1667,7 @@ msgstr "Procesando..." msgid "Profile" msgstr "Perfil" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "Protege tu cuenta verificando tu correo electrónico." @@ -1628,6 +1688,10 @@ msgstr "Citar una publicación" msgid "Quote Post" msgstr "Citar una publicación" +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "" + #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" msgstr "Proporciones" @@ -1695,7 +1759,7 @@ msgstr "Respuestas" msgid "Replies to this thread are disabled" msgstr "Las respuestas a este hilo están desactivadas" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "Filtros de respuestas" @@ -1738,6 +1802,10 @@ msgstr "Vuelto a publicar por" msgid "Request Change" msgstr "Solicitar un cambio" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "" + #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "Requerido para este proveedor" @@ -1746,7 +1814,7 @@ msgstr "Requerido para este proveedor" msgid "Reset code" msgstr "Restablecer el código" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "Restablecer el estado de incorporación" @@ -1754,28 +1822,27 @@ msgstr "Restablecer el estado de incorporación" msgid "Reset password" msgstr "Restablecer la contraseña" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "Restablecer el estado de preferencias" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "Restablece el estado de incorporación" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "Restablecer el estado de preferencias" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" msgstr "Volver a intentar" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1821,7 +1888,7 @@ msgstr "Buscar" #: src/view/com/auth/LoggedOut.tsx:104 #: src/view/com/auth/LoggedOut.tsx:105 msgid "Search for users" -msgstr "" +msgstr "Buscar usuarios" #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" @@ -1839,7 +1906,7 @@ msgstr "Seleccionar Bluesky Social" msgid "Select from an existing account" msgstr "Selecciona de una cuenta existente" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "Selecciona el servicio" @@ -1880,23 +1947,23 @@ msgstr "Enviar el informe" msgid "Set new password" msgstr "Establecer la contraseña nueva" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." msgstr "Establece este ajuste en \"No\" para ocultar todas las publicaciones de citas de tus noticias. Las repeticiones seguirán siendo visibles." -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." msgstr "Establece este ajuste en \"No\" para ocultar todas las respuestas de tus noticias." -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." msgstr "Establece este ajuste en \"No\" para ocultar todas las veces que se han vuelto a publicar desde tus noticias." -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "Establece este ajuste en \"SÃ\" para mostrar las respuestas en una vista de hilos. Se trata de una función experimental." -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." msgstr "Establece este ajuste en \"SÃ\" para mostrar muestras de tus noticias guardadas en tu siguiente canal de noticias. Se trata de una función experimental." @@ -1930,23 +1997,27 @@ msgstr "Mostrar" msgid "Show anyway" msgstr "Mostrar de todas maneras" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" msgstr "Mostrar publicaciones de mis noticias" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" msgstr "Mostrar publicaciones de citas" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" msgstr "Mostrar respuestas" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "Mostrar las respuestas de las personas a quienes sigues antes que el resto de respuestas." -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" msgstr "Mostrar publicaciones que se han publicado nuevamente" @@ -1983,7 +2054,7 @@ msgstr "Iniciar sesión como {0}" msgid "Sign in as..." msgstr "Iniciar sesión como ..." -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "Iniciar sesión en" @@ -2037,11 +2108,11 @@ msgstr "Cuadrado" msgid "Staging" msgstr "Puesta en escena" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "Página de estado" -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "Libro de cuentos" @@ -2070,7 +2141,7 @@ msgstr "Soporte" msgid "Switch Account" msgstr "Cambiar a otra cuenta" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "Bitácora del sistema" @@ -2082,7 +2153,7 @@ msgstr "Alto" msgid "Terms" msgstr "Condiciones" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2125,10 +2196,6 @@ msgstr "Las condiciones de servicio se han trasladado a" msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" msgstr "Se ha producido un problema inesperado en la aplicación. Por favor, ¡avÃsanos si te ha ocurrido esto!" -#: src/view/com/util/moderation/LabelInfo.tsx:45 -#~ msgid "This {0} has been labeled." -#~ msgstr "Este {0} ha sido etiquetado." - #: src/view/com/util/moderation/ScreenHider.tsx:88 msgid "This {screenDescription} has been flagged:" msgstr "Esta {screenDescription} ha sido marcada:" @@ -2137,6 +2204,10 @@ msgstr "Esta {screenDescription} ha sido marcada:" msgid "This account has requested that users sign in to view their profile." msgstr "Esta cuenta ha solicitado que los usuarios inicien sesión para ver su perfil." +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "Este contenido no se puede ver sin una cuenta Bluesky." @@ -2171,14 +2242,14 @@ msgstr "Esta advertencia sólo está disponible para las publicaciones con medio #: src/view/com/util/forms/PostDropdownBtn.tsx:178 msgid "This will hide this post from your feeds." -msgstr "" +msgstr "Esto ocultará esta entrada de tus contenidos." #: src/view/screens/PreferencesThreads.tsx:53 #: src/view/screens/Settings.tsx:503 msgid "Thread Preferences" msgstr "Preferencias de hilos" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "Modo con hilos" @@ -2210,7 +2281,7 @@ msgstr "Desactivar la opción de silenciar la lista" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "No se puede contactar con tu servicio. Comprueba tu conexión a Internet." @@ -2228,7 +2299,7 @@ msgstr "Desbloquear una cuenta" msgid "Undo repost" msgstr "Deshacer esta publicación" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "Lamentablemente, no cumples los requisitos para crear una cuenta." @@ -2284,8 +2355,8 @@ msgstr "Identificador del usuario" msgid "User Lists" msgstr "Listas de usuarios" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "Nombre de usuario o dirección de correo electrónico" @@ -2301,15 +2372,15 @@ msgstr "usuarios seguidos por <0/>" msgid "Users in \"{0}\"" msgstr "Usuarios en «{0}»" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" msgstr "Verificar el correo electrónico" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "Verificar mi correo electrónico" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "Verificar mi correo electrónico" @@ -2351,12 +2422,8 @@ msgid "What is the issue with this {collectionName}?" msgstr "¿Cuál es el problema con esta {collectionName}?" #: src/view/com/auth/SplashScreen.tsx:34 -#~ msgid "What's next?" -#~ msgstr "¿Qué sigue?" - -#: src/view/com/auth/SplashScreen.tsx:34 msgid "What's up?" -msgstr "" +msgstr "¿Qué hay de nuevo?" #: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 msgid "Which languages are used in this post?" @@ -2375,7 +2442,7 @@ msgstr "Quién puede responder" msgid "Wide" msgstr "Ancho" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" msgstr "Redactar una publicación" @@ -2383,10 +2450,12 @@ msgstr "Redactar una publicación" msgid "Write your reply" msgstr "Redactar tu respuesta" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "SÃ" diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po index 58d7f3911..21e8904a6 100644 --- a/src/locale/locales/fr/messages.po +++ b/src/locale/locales/fr/messages.po @@ -57,7 +57,7 @@ msgstr "<0>Suivre certains</0><1>utilisateurs</1><2>recommandés</2>" #: src/view/com/util/moderation/LabelInfo.tsx:45 msgid "A content warning has been applied to this {0}." -msgstr "" +msgstr "Un avertissement sur le contenu a été appliqué sur ce {0}." #: src/lib/hooks/useOTAUpdate.ts:16 msgid "A new version of the app is available. Please update to continue using the app." @@ -68,7 +68,7 @@ msgstr "Une nouvelle version de l’application est disponible. Veuillez faire l msgid "Accessibility" msgstr "Accessibilité" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "Compte" @@ -98,6 +98,7 @@ msgstr "Ajouter un compte" #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "Ajouter un texte alt" @@ -110,17 +111,17 @@ msgstr "Ajouter des détails" msgid "Add details to report" msgstr "Ajouter des détails au rapport" -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" -msgstr "Ajouter une carte link card" +msgstr "Ajouter une carte de lien" -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" -msgstr "Ajouter une carte link card :" +msgstr "Ajouter une carte de lien :" #: src/view/com/modals/ChangeHandle.tsx:415 msgid "Add the following DNS record to your domain:" -msgstr "Ajoutez le registre DNS suivant à votre domaine :" +msgstr "Ajoutez l’enregistrement DNS suivant à votre domaine :" #: src/view/com/profile/ProfileHeader.tsx:353 msgid "Add to Lists" @@ -135,7 +136,7 @@ msgstr "Ajouter à mes fils d’actu" msgid "Added to list" msgstr "Ajouté à la liste" -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "Définissez le nombre de likes qu’une réponse doit avoir pour être affichée dans votre fil d’actualité." @@ -143,7 +144,7 @@ msgstr "Définissez le nombre de likes qu’une réponse doit avoir pour être a msgid "Adult Content" msgstr "Contenu pour adultes" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "Avancé" @@ -176,23 +177,22 @@ msgstr "et" msgid "App Language" msgstr "Langue de l’application" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" -msgstr "Mots de passe de l’appli" +msgstr "Mots de passe d’application" #: src/view/screens/AppPasswords.tsx:186 msgid "App Passwords" -msgstr "Mots de passe de l’appli" +msgstr "Mots de passe d’application" #: src/view/com/util/forms/PostDropdownBtn.tsx:236 msgid "Appeal content warning" -msgstr "" +msgstr "Faire appel de l’avertissement sur le contenu" #: src/view/com/modals/AppealLabel.tsx:65 msgid "Appeal Content Warning" -msgstr "" +msgstr "Appel de l’avertissement sur le contenu" -#: src/view/com/modals/AppealLabel.tsx:65 #~ msgid "Appeal Decision" #~ msgstr "Appel de la décision" @@ -210,9 +210,9 @@ msgstr "Affichage" #: src/view/screens/AppPasswords.tsx:223 msgid "Are you sure you want to delete the app password \"{name}\"?" -msgstr "Êtes-vous sûr de vouloir supprimer le mot de passe de l’application \"{name}\" ?" +msgstr "Êtes-vous sûr de vouloir supprimer le mot de passe de l’application « {name} » ?" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "Êtes-vous sûr de vouloir rejeter ce brouillon ?" @@ -231,7 +231,7 @@ msgstr "Nudité artistique ou non érotique." #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -289,7 +289,7 @@ msgstr "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous m #: src/view/com/post-thread/PostThread.tsx:250 msgid "Blocked post." -msgstr "Publication bloquée." +msgstr "Post bloqué." #: src/view/screens/ProfileList.tsx:310 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." @@ -327,7 +327,7 @@ msgstr "Bluesky n’affichera pas votre profil et vos messages à des utilisateu msgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "Version Build {0} {1}" @@ -345,9 +345,8 @@ msgstr "Caméra" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "Ne peut contenir que des lettres, des chiffres, des espaces, des tirets et des tirets bas. La longueur doit être d’au moins 4 caractères, mais pas plus de 32." -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -368,23 +367,23 @@ msgstr "Annuler" #: src/view/com/modals/DeleteAccount.tsx:146 #: src/view/com/modals/DeleteAccount.tsx:219 msgid "Cancel account deletion" -msgstr "Annuler suppression de compte" +msgstr "Annuler la suppression de compte" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "Annuler l’ajout d’un texte alt à l’image" +#~ msgid "Cancel add image alt text" +#~ msgstr "Annuler l’ajout d’un texte alt à l’image" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" -msgstr "Annuler changement pseudo" +msgstr "Annuler le changement de pseudo" #: src/view/com/modals/crop-image/CropImage.web.tsx:134 msgid "Cancel image crop" -msgstr "Annuler recadrage de l’image" +msgstr "Annuler le recadrage de l’image" #: src/view/com/modals/EditProfile.tsx:243 msgid "Cancel profile editing" -msgstr "Annuler modification du profil" +msgstr "Annuler la modification du profil" #: src/view/com/modals/Repost.tsx:64 msgid "Cancel quote post" @@ -403,14 +402,14 @@ msgstr "Annuler l’inscription sur la liste d’attente" msgid "Change" msgstr "Changer" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" -msgstr "Changer pseudo" +msgstr "Changer le pseudo" #: src/view/com/modals/ChangeHandle.tsx:161 msgid "Change Handle" -msgstr "Changer Pseudo" +msgstr "Changer le pseudo" #: src/view/com/modals/VerifyEmail.tsx:141 msgid "Change my email" @@ -434,7 +433,7 @@ msgstr "Consultez votre boîte de réception, vous avez du recevoir un e-mail co #: src/view/com/modals/Threadgate.tsx:72 msgid "Choose \"Everybody\" or \"Nobody\"" -msgstr "" +msgstr "Choisir « Tout le monde » ou « Personne »" #: src/view/com/modals/ServerInput.tsx:38 msgid "Choose Service" @@ -448,19 +447,19 @@ msgstr "Choisissez les algorithmes qui alimentent votre expérience avec des fil msgid "Choose your password" msgstr "Choisissez votre mot de passe" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "Effacer toutes les données de stockage existantes" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "Effacer toutes les données de stockage existantes (redémarrer ensuite)" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "Effacer toutes les données de stockage" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "Effacer toutes les données de stockage (redémarrer ensuite)" @@ -501,8 +500,8 @@ msgstr "Rédiger une réponse" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "Confirmer" @@ -526,9 +525,9 @@ msgid "Confirmation code" msgstr "Code de confirmation" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." -msgstr "Connexion..." +msgstr "Connexion…" #: src/view/screens/Moderation.tsx:81 msgid "Content filtering" @@ -571,7 +570,7 @@ msgstr "Copier le lien dans la liste" #: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" -msgstr "Copier le lien dans la publication" +msgstr "Copier le lien vers le post" #: src/view/com/profile/ProfileHeader.tsx:338 msgid "Copy link to profile" @@ -579,7 +578,7 @@ msgstr "Copier le lien sur le profil" #: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" -msgstr "Copier le texte de la publication" +msgstr "Copier le texte du post" #: src/view/screens/CopyrightPolicy.tsx:29 msgid "Copyright Policy" @@ -616,17 +615,21 @@ msgstr "{0} créé" msgid "Custom domain" msgstr "Domaine personnalisé" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "Zone de danger" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" -msgstr "Supprimer compte" +msgstr "Supprimer le compte" #: src/view/com/modals/DeleteAccount.tsx:83 msgid "Delete Account" -msgstr "Supprimer compte" +msgstr "Supprimer le compte" #: src/view/screens/AppPasswords.tsx:221 #: src/view/screens/AppPasswords.tsx:241 @@ -642,21 +645,21 @@ msgstr "Supprimer la liste" msgid "Delete my account" msgstr "Supprimer mon compte" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" -msgstr "Supprimer mon compte..." +msgstr "Supprimer mon compte…" #: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" -msgstr "Supprimer publication" +msgstr "Supprimer le post" #: src/view/com/util/forms/PostDropdownBtn.tsx:218 msgid "Delete this post?" -msgstr "Supprimer cette publication ?" +msgstr "Supprimer ce post ?" #: src/view/com/post-thread/PostThread.tsx:242 msgid "Deleted post." -msgstr "Publication supprimée." +msgstr "Post supprimé." #: src/view/com/modals/CreateOrEditList.tsx:218 #: src/view/com/modals/CreateOrEditList.tsx:234 @@ -669,25 +672,25 @@ msgstr "Description" msgid "Dev Server" msgstr "Serveur de dév" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" -msgstr "Outils du dév" +msgstr "Outils de dév" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" -msgstr "" +msgstr "Vous vouliez dire quelque chose ?" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "Ignorer" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" -msgstr "Ignorer brouillon" +msgstr "Ignorer le brouillon" #: src/view/screens/Moderation.tsx:207 msgid "Discourage apps from showing my account to logged-out users" -msgstr "Empêcher les appli de montrer mon compte aux utilisateurs déconnectés" +msgstr "Empêcher les applis de montrer mon compte aux utilisateurs déconnectés" #: src/view/screens/Feeds.tsx:405 msgid "Discover new feeds" @@ -695,17 +698,18 @@ msgstr "Découvrir de nouveaux fils d’actu" #: src/view/com/modals/EditProfile.tsx:191 msgid "Display name" -msgstr "Afficher nom" +msgstr "Afficher le nom" #: src/view/com/modals/EditProfile.tsx:179 msgid "Display Name" -msgstr "Afficher nom" +msgstr "Afficher le nom" #: src/view/com/modals/ChangeHandle.tsx:485 msgid "Domain verified!" msgstr "Domaine vérifié !" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -715,8 +719,8 @@ msgstr "Domaine vérifié !" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "Terminé" @@ -748,11 +752,11 @@ msgstr "Modifier mon profil" #: src/view/com/profile/ProfileHeader.tsx:453 msgid "Edit profile" -msgstr "Modifier profil" +msgstr "Modifier le profil" #: src/view/com/profile/ProfileHeader.tsx:456 msgid "Edit Profile" -msgstr "Modifier profil" +msgstr "Modifier le profil" #: src/view/screens/Feeds.tsx:330 msgid "Edit Saved Feeds" @@ -777,7 +781,15 @@ msgstr "E-mail mis à jour" msgid "Email:" msgstr "E-mail :" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "Activez ce paramètre pour ne voir que les réponses des personnes que vous suivez." @@ -821,6 +833,20 @@ msgstr "Tout le monde" msgid "Expand alt text" msgstr "Développer le texte alt" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -862,13 +888,13 @@ msgstr "Trouver des utilisateurs sur Bluesky" #: src/view/screens/Search/Search.tsx:425 msgid "Find users with the search tool on the right" -msgstr "Trouvez des utilisateurs à l’aide de l’outil de recherche, à droite." +msgstr "Trouvez des utilisateurs à l’aide de l’outil de recherche, à droite" #: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 msgid "Finding similar accounts..." -msgstr "Recherche de comptes similaires..." +msgstr "Recherche de comptes similaires…" -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "Affinez le contenu de votre écran d’accueil." @@ -888,7 +914,7 @@ msgstr "Suivez quelques utilisateurs pour commencer. Nous pouvons vous recommand msgid "Followed users" msgstr "Utilisateurs suivis" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "Utilisateurs suivis uniquement" @@ -917,11 +943,11 @@ msgstr "Pour des raisons de sécurité, nous devrons envoyer un code de confirma msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "Pour des raisons de sécurité, vous ne pourrez plus afficher ceci. Si vous perdez ce mot de passe, vous devrez en générer un autre." -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "Oublié" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "Mot de passe oublié" @@ -953,7 +979,7 @@ msgid "Go Back" msgstr "Retour" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "Aller à la suite" @@ -974,19 +1000,19 @@ msgstr "Voici le mot de passe de votre appli." #: src/view/com/notifications/FeedItem.tsx:324 #: src/view/com/util/moderation/ContentHider.tsx:103 msgid "Hide" -msgstr "Masquer" +msgstr "Cacher" #: src/view/com/util/forms/PostDropdownBtn.tsx:173 msgid "Hide post" -msgstr "" +msgstr "Cacher ce post" #: src/view/com/util/forms/PostDropdownBtn.tsx:177 msgid "Hide this post?" -msgstr "" +msgstr "Cacher ce post ?" #: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" -msgstr "Masquer la liste des utilisateurs" +msgstr "Cacher la liste des utilisateurs" #: src/view/com/posts/FeedErrorMessage.tsx:110 msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." @@ -998,11 +1024,11 @@ msgstr "Hmm, le serveur du fils d’actu semble être mal configuré. Veuillez i #: src/view/com/posts/FeedErrorMessage.tsx:104 msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." -msgstr "Mmm... le serveur de fils d’actu semble être hors ligne. Veuillez informer le propriétaire du fil d’actu de ce problème." +msgstr "Mmm… le serveur de fils d’actu semble être hors ligne. Veuillez informer le propriétaire du fil d’actu de ce problème." #: src/view/com/posts/FeedErrorMessage.tsx:101 msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." -msgstr "Mmm... le serveur de fils d’actu ne répond pas. Veuillez informer le propriétaire du fil d’actu de ce problème." +msgstr "Mmm… le serveur de fils d’actu ne répond pas. Veuillez informer le propriétaire du fil d’actu de ce problème." #: src/view/com/posts/FeedErrorMessage.tsx:95 msgid "Hmm, we're having trouble finding this feed. It may have been deleted." @@ -1016,7 +1042,7 @@ msgid "Home" msgstr "Accueil" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "Préférences de fils d’actu de l’accueil" @@ -1051,7 +1077,7 @@ msgstr "Texte alt de l’image" msgid "Image options" msgstr "Options d’images" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "Nom d’utilisateur ou mot de passe incorrect" @@ -1147,7 +1173,7 @@ msgstr "Bibliothèque" #: src/view/screens/ProfileFeed.tsx:586 msgid "Like this feed" -msgstr "Likez ce fils d’actu" +msgstr "Liker ce fil d’actu" #: src/view/screens/PostLikedBy.tsx:27 #: src/view/screens/ProfileFeedLikedBy.tsx:27 @@ -1188,7 +1214,7 @@ msgstr "Charger les nouveaux messages" #: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 msgid "Loading..." -msgstr "Chargement..." +msgstr "Chargement…" #: src/view/com/modals/ServerInput.tsx:50 msgid "Local dev server" @@ -1202,10 +1228,6 @@ msgstr "Visibilité déconnectée" msgid "Login to account that is not listed" msgstr "Se connecter à un compte qui n’est pas listé" -#: src/view/screens/ProfileFeed.tsx:472 -#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" -#~ msgstr "On dirait que ce fils d’actu n’est disponible que pour les utilisateurs disposant d’un compte Bluesky. Veuillez vous inscrire ou vous connecter pour voir ce fils d’actu !" - #: src/view/com/modals/LinkWarning.tsx:63 msgid "Make sure this is where you intend to go!" msgstr "Assurez-vous que c’est bien là que vous avez l’intention d’aller !" @@ -1256,41 +1278,45 @@ msgstr "Plus de fils d’actu" msgid "More options" msgstr "Plus d’options" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "Réponses les plus likées en premier" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" -msgstr "Compte en sourdine" +msgstr "Masquer le compte" #: src/view/screens/ProfileList.tsx:511 msgid "Mute accounts" -msgstr "Comptes en sourdine" +msgstr "Masquer les comptes" #: src/view/screens/ProfileList.tsx:458 msgid "Mute list" -msgstr "Mettre en sourdine" +msgstr "Masquer la liste" #: src/view/screens/ProfileList.tsx:271 msgid "Mute these accounts?" -msgstr "Mettre ces comptes en sourdine ?" +msgstr "Masquer ces comptes ?" #: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" -msgstr "Mettre fil en sourdine" +msgstr "Masquer ce fil de discussion" #: src/view/screens/Moderation.tsx:109 msgid "Muted accounts" -msgstr "Comptes en sourdine" +msgstr "Comptes masqués" #: src/view/screens/ModerationMutedAccounts.tsx:107 msgid "Muted Accounts" -msgstr "Comptes en sourdine" +msgstr "Comptes masqués" #: src/view/screens/ModerationMutedAccounts.tsx:115 msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." -msgstr "Les comptes mis en sourdine voient leurs publications supprimées de votre fil d’actualité et de vos notifications. Cette option est totalement privée." +msgstr "Les comptes masqués voient leurs posts supprimés de votre fil d’actualité et de vos notifications. Cette option est totalement privée." #: src/view/screens/ProfileList.tsx:273 msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." -msgstr "Ce que vous mettez en sourdine reste privé. Les comptes en sourdine peuvent interagir avec vous, mais vous ne verrez pas leurs publications et ne recevrez pas de notifications de leur part." +msgstr "Ce que vous masquez reste privé. Les comptes masqués peuvent interagir avec vous, mais vous ne verrez pas leurs posts et ne recevrez pas de notifications de leur part." #: src/view/com/modals/BirthDateSettings.tsx:56 msgid "My Birthday" @@ -1313,6 +1339,11 @@ msgstr "Mes fils d’actu enregistrés" msgid "Name" msgstr "Nom" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "Ne perdez jamais l’accès à vos followers et à vos données." @@ -1330,16 +1361,20 @@ msgstr "Nouveau" #: src/view/screens/ProfileList.tsx:222 #: src/view/shell/desktop/LeftNav.tsx:248 msgid "New post" -msgstr "Nouvelle publication" +msgstr "Nouveau post" #: src/view/shell/desktop/LeftNav.tsx:258 msgid "New Post" -msgstr "Nouvelle publication" +msgstr "Nouveau post" + +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1350,10 +1385,12 @@ msgstr "Suivant" msgid "Next image" msgstr "Image suivante" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "Non" @@ -1368,7 +1405,7 @@ msgstr "Aucun résultat" #: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" -msgstr "Aucun résultat trouvé pour \"{query}\"" +msgstr "Aucun résultat trouvé pour « {query} »" #: src/view/com/modals/ListAddRemoveUsers.tsx:127 #: src/view/screens/Search/Search.tsx:270 @@ -1378,6 +1415,10 @@ msgstr "Aucun résultat trouvé pour \"{query}\"" msgid "No results found for {query}" msgstr "Aucun résultat trouvé pour {query}" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "Personne" @@ -1407,7 +1448,11 @@ msgstr "Oh non !" msgid "Okay" msgstr "D’accord" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "Plus anciennes réponses en premier" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "Une ou plusieurs images n’ont pas de texte alt." @@ -1415,6 +1460,11 @@ msgstr "Une ou plusieurs images n’ont pas de texte alt." msgid "Only {0} can reply." msgstr "Seul {0} peut répondre." +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "Ouvrir le sélecteur d’emoji" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "Navigation ouverte" @@ -1423,6 +1473,10 @@ msgstr "Navigation ouverte" msgid "Opens configurable language settings" msgstr "Ouvre les paramètres linguistiques configurables" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1440,7 +1494,7 @@ msgstr "Ouvre les paramètres de modération" msgid "Opens screen with all saved feeds" msgstr "Ouvre l’écran avec tous les fils d’actu enregistrés" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "Ouvre la page de configuration du mot de passe" @@ -1448,11 +1502,11 @@ msgstr "Ouvre la page de configuration du mot de passe" msgid "Opens the home feed preferences" msgstr "Ouvre les préférences du fil d’accueil" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "Ouvre la page de l’historique" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "Ouvre la page du journal système" @@ -1462,7 +1516,7 @@ msgstr "Ouvre les préférences relatives aux fils de discussion" #: src/view/com/modals/Threadgate.tsx:89 msgid "Or combine these options:" -msgstr "" +msgstr "Ou une combinaison de ces options :" #: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" @@ -1474,7 +1528,7 @@ msgstr "Autre service" #: src/view/com/composer/select-language/SelectLangBtn.tsx:91 msgid "Other..." -msgstr "Autre..." +msgstr "Autre…" #: src/view/screens/NotFound.tsx:42 #: src/view/screens/NotFound.tsx:45 @@ -1483,7 +1537,7 @@ msgstr "Page introuvable" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1505,6 +1559,19 @@ msgstr "Images destinées aux adultes." msgid "Pinned Feeds" msgstr "Fils épinglés" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "Veuillez choisir votre pseudo." @@ -1532,42 +1599,40 @@ msgstr "Veuillez également entrer votre mot de passe :" #: src/view/com/modals/AppealLabel.tsx:72 #: src/view/com/modals/AppealLabel.tsx:75 msgid "Please tell us why you think this content warning was incorrectly applied!" -msgstr "" +msgstr "Dites-nous donc pourquoi vous pensez que cet avertissement de contenu a été appliqué à tort !" -#: src/view/com/modals/AppealLabel.tsx:72 -#: src/view/com/modals/AppealLabel.tsx:75 #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "Dites-nous pourquoi vous pensez que cette décision était incorrecte." -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" -msgstr "" +msgstr "Veuillez patienter le temps que votre carte de lien soit chargée" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" -msgstr "Publication" +msgstr "Post" #: src/view/com/post-thread/PostThread.tsx:378 msgid "Post hidden" -msgstr "Publications cachées" +msgstr "Posts cachés" #: src/view/com/composer/select-language/SelectLangBtn.tsx:87 msgid "Post language" -msgstr "Langue de publication" +msgstr "Langue du post" #: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 msgid "Post Languages" -msgstr "Langues de publication" +msgstr "Langues du post" #: src/view/com/post-thread/PostThread.tsx:430 msgid "Post not found" -msgstr "Publication introuvable" +msgstr "Post introuvable" #: src/view/screens/Profile.tsx:161 msgid "Posts" -msgstr "Publications" +msgstr "Posts" #: src/view/com/modals/LinkWarning.tsx:44 msgid "Potentially Misleading Link" @@ -1581,23 +1646,24 @@ msgstr "Image précédente" msgid "Primary Language" msgstr "Langue principale" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "Définissez des priorités de vos suivis" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "Vie privée" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "Charte de confidentialité" #: src/view/com/auth/login/ForgotPasswordForm.tsx:190 msgid "Processing..." -msgstr "Traitement..." +msgstr "Traitement…" #: src/view/shell/bottom-bar/BottomBar.tsx:247 #: src/view/shell/desktop/LeftNav.tsx:415 @@ -1607,13 +1673,13 @@ msgstr "Traitement..." msgid "Profile" msgstr "Profil" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "Protégez votre compte en vérifiant votre e-mail." #: src/view/screens/ModerationModlists.tsx:61 msgid "Public, shareable lists of users to mute or block in bulk." -msgstr "Listes publiques et partageables d’utilisateurs à mettre en sourdine ou à bloquer." +msgstr "Listes publiques et partageables d’utilisateurs à masquer ou à bloquer." #: src/view/screens/Lists.tsx:61 msgid "Public, shareable lists which can drive feeds." @@ -1622,11 +1688,15 @@ msgstr "Les listes publiques et partageables qui peuvent alimenter les fils d’ #: src/view/com/modals/Repost.tsx:52 #: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 msgid "Quote post" -msgstr "Citer une publication" +msgstr "Citer le post" #: src/view/com/modals/Repost.tsx:56 msgid "Quote Post" -msgstr "Citer une publication" +msgstr "Citer un post" + +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "" #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" @@ -1668,19 +1738,19 @@ msgstr "Supprimer de mes fils d’actu" #: src/view/com/composer/photos/Gallery.tsx:167 msgid "Remove image" -msgstr "Supprimer image" +msgstr "Supprimer l’image" #: src/view/com/composer/ExternalEmbed.tsx:70 msgid "Remove image preview" -msgstr "Supprimer aperçu d’image" +msgstr "Supprimer l’aperçu d’image" #: src/view/com/feeds/FeedSourceCard.tsx:173 msgid "Remove this feed from my feeds?" -msgstr "Supprimer ce fils d’actu ?" +msgstr "Supprimer ce fil d’actu ?" #: src/view/com/posts/FeedErrorMessage.tsx:131 msgid "Remove this feed from your saved feeds?" -msgstr "Supprimer ce fils d’actu de vos fils d’actu enregistrés ?" +msgstr "Supprimer ce fil d’actu de vos fils d’actu enregistrés ?" #: src/view/com/modals/ListAddRemoveUsers.tsx:199 #: src/view/com/modals/UserAddRemoveLists.tsx:136 @@ -1695,7 +1765,7 @@ msgstr "Réponses" msgid "Replies to this thread are disabled" msgstr "Les réponses à ce fil de discussion sont désactivées" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "Filtres de réponse" @@ -1705,20 +1775,20 @@ msgstr "Signaler {collectionName}" #: src/view/com/profile/ProfileHeader.tsx:404 msgid "Report Account" -msgstr "Signaler Compte" +msgstr "Signaler le compte" #: src/view/screens/ProfileFeed.tsx:291 msgid "Report feed" -msgstr "Signaler fil d’actu" +msgstr "Signaler le fil d’actu" #: src/view/screens/ProfileList.tsx:426 msgid "Report List" -msgstr "Signaler Liste" +msgstr "Signaler la liste" #: src/view/com/modals/report/SendReportButton.tsx:37 #: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" -msgstr "Signaler publication" +msgstr "Signaler le post" #: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 msgid "Repost" @@ -1738,15 +1808,19 @@ msgstr "Republié par" msgid "Request Change" msgstr "Demande de modification" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "Nécessiter un texte alt avant de publier" + #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "Obligatoire pour ce fournisseur" #: src/view/com/auth/login/SetNewPasswordForm.tsx:108 msgid "Reset code" -msgstr "Réinitialiser code" +msgstr "Réinitialiser le code" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "Réinitialisation de l’état d’accueil" @@ -1754,28 +1828,27 @@ msgstr "Réinitialisation de l’état d’accueil" msgid "Reset password" msgstr "Réinitialiser mot de passe" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "Réinitialiser l’état des préférences" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "Réinitialise l’état d’accueil" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "Réinitialise l’état des préférences" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" msgstr "Réessayer" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1787,11 +1860,11 @@ msgstr "Enregistrer" #: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" -msgstr "Enregistrer texte alt" +msgstr "Enregistrer le texte alt" #: src/view/com/modals/EditProfile.tsx:231 msgid "Save Changes" -msgstr "Enregistrer modifications" +msgstr "Enregistrer les modifications" #: src/view/com/modals/ChangeHandle.tsx:170 msgid "Save handle change" @@ -1821,7 +1894,7 @@ msgstr "Recherche" #: src/view/com/auth/LoggedOut.tsx:104 #: src/view/com/auth/LoggedOut.tsx:105 msgid "Search for users" -msgstr "" +msgstr "Rechercher des utilisateurs" #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" @@ -1839,7 +1912,7 @@ msgstr "Sélectionner Bluesky Social" msgid "Select from an existing account" msgstr "Sélectionner un compte existant" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "Sélectionner un service" @@ -1870,33 +1943,33 @@ msgstr "Envoyer e-mail" #: src/view/shell/Drawer.tsx:295 #: src/view/shell/Drawer.tsx:316 msgid "Send feedback" -msgstr "Envoyer commentaire" +msgstr "Envoyer des commentaires" #: src/view/com/modals/report/SendReportButton.tsx:45 msgid "Send Report" -msgstr "Envoyer rapport" +msgstr "Envoyer le rapport" #: src/view/com/auth/login/SetNewPasswordForm.tsx:78 msgid "Set new password" msgstr "Définir un nouveau mot de passe" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." -msgstr "Choisissez « Non » pour masquer toutes les citations sur votre fils d’actu. Les republications seront toujours visibles." +msgstr "Choisissez « Non » pour cacher toutes les citations sur votre fils d’actu. Les reposts seront toujours visibles." -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." -msgstr "Choisissez « Non » pour masquer toutes les réponses dans votre fils d’actu." +msgstr "Choisissez « Non » pour cacher toutes les réponses dans votre fils d’actu." -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." -msgstr "Choisissez « Non » pour masquer toutes les republications de votre fils d’actu." +msgstr "Choisissez « Non » pour cacher toutes les reposts de votre fils d’actu." -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "Choisissez « Oui » pour afficher les réponses dans un fil de discussion. C’est une fonctionnalité expérimentale." -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." msgstr "Choisissez « Oui » pour afficher des échantillons de vos fils d’actu enregistrés dans votre fils d’actu suivant. C’est une fonctionnalité expérimentale." @@ -1919,7 +1992,7 @@ msgstr "Partager" #: src/view/screens/ProfileFeed.tsx:303 msgid "Share feed" -msgstr "Partager fils d’actu" +msgstr "Partager le fil d’actu" #: src/view/com/util/moderation/ContentHider.tsx:105 #: src/view/screens/Settings.tsx:316 @@ -1930,25 +2003,29 @@ msgstr "Afficher" msgid "Show anyway" msgstr "Afficher quand même" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" -msgstr "Afficher les Publications de Mes fils d’actu" +msgstr "Afficher les posts de mes fils d’actu" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" -msgstr "Afficher les Publications de citation" +msgstr "Afficher les posts de citation" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" -msgstr "Afficher réponses" +msgstr "Afficher les réponses" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "Afficher les réponses des personnes que vous suivez avant toutes les autres réponses." -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" -msgstr "Afficher les republications" +msgstr "Afficher les reposts" #: src/view/com/notifications/FeedItem.tsx:345 msgid "Show users" @@ -1981,9 +2058,9 @@ msgstr "Se connecter en tant que {0}" #: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:116 msgid "Sign in as..." -msgstr "Se connecter en tant que..." +msgstr "Se connecter en tant que…" -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "Se connecter à " @@ -2022,11 +2099,11 @@ msgstr "Ignorer" #: src/view/screens/PreferencesThreads.tsx:69 msgid "Sort Replies" -msgstr "Trier réponses" +msgstr "Trier les réponses" #: src/view/screens/PreferencesThreads.tsx:72 msgid "Sort replies to the same post by:" -msgstr "Trier les réponses à la même publication par :" +msgstr "Trier les réponses au même post par :" #: src/view/com/modals/crop-image/CropImage.web.tsx:122 msgid "Square" @@ -2037,11 +2114,11 @@ msgstr "Carré" msgid "Staging" msgstr "Mise en scène" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "Page de statut" -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "Historique" @@ -2070,7 +2147,7 @@ msgstr "Soutien" msgid "Switch Account" msgstr "Changer de compte" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "Journal système" @@ -2082,7 +2159,7 @@ msgstr "Grand" msgid "Terms" msgstr "Conditions générales" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2107,7 +2184,7 @@ msgstr "Notre politique de droits d’auteur a été déplacée vers <0/>" #: src/view/com/post-thread/PostThread.tsx:433 msgid "The post may have been deleted." -msgstr "Cette publication a peut-être été supprimée." +msgstr "Ce post a peut-être été supprimé." #: src/view/screens/PrivacyPolicy.tsx:33 msgid "The Privacy Policy has been moved to <0/>" @@ -2115,7 +2192,7 @@ msgstr "Notre politique de confidentialité a été déplacée vers <0/>" #: src/view/screens/Support.tsx:36 msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." -msgstr "Le formulaire d’assistance a été déplacé. Si vous avez besoin d’aide, veuillez <0/> ou rendez-vous {HELP_DESK_URL} pour nous contacter." +msgstr "Le formulaire d’assistance a été déplacé. Si vous avez besoin d’aide, veuillez <0/> ou rendez-vous sur {HELP_DESK_URL} pour nous contacter." #: src/view/screens/TermsOfService.tsx:33 msgid "The Terms of Service have been moved to" @@ -2125,7 +2202,6 @@ msgstr "Nos conditions d’utilisation ont été déplacées vers" msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" msgstr "Un problème inattendu s’est produit dans l’application. N’hésitez pas à nous faire savoir si cela vous est arrivé !" -#: src/view/com/util/moderation/LabelInfo.tsx:45 #~ msgid "This {0} has been labeled." #~ msgstr "Ce {0} a été classé." @@ -2137,6 +2213,10 @@ msgstr "Ce {screenDescription} a été signalé :" msgid "This account has requested that users sign in to view their profile." msgstr "Ce compte a demandé aux utilisateurs de s’identifier pour voir son profil." +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "Ce contenu n’est pas visible sans un compte Bluesky." @@ -2163,7 +2243,7 @@ msgstr "Ce lien vous conduit au site Web suivant :" #: src/view/com/post-thread/PostThreadItem.tsx:123 msgid "This post has been deleted." -msgstr "Cette publication a été supprimée." +msgstr "Ce post a été supprimé." #: src/view/com/modals/SelfLabel.tsx:137 msgid "This warning is only available for posts with media attached." @@ -2171,20 +2251,20 @@ msgstr "Cet avertissement n’est disponible que pour les messages contenant des #: src/view/com/util/forms/PostDropdownBtn.tsx:178 msgid "This will hide this post from your feeds." -msgstr "" +msgstr "Cela va masquer ce post de vos fils d’actu." #: src/view/screens/PreferencesThreads.tsx:53 #: src/view/screens/Settings.tsx:503 msgid "Thread Preferences" msgstr "Préférences des fils de discussion" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "Mode arborescent" #: src/view/com/util/forms/DropdownButton.tsx:230 msgid "Toggle dropdown" -msgstr "Basculer menu déroulant" +msgstr "Activer le menu déroulant" #: src/view/com/modals/EditImage.tsx:271 msgid "Transformations" @@ -2202,15 +2282,15 @@ msgstr "Réessayer" #: src/view/screens/ProfileList.tsx:473 msgid "Un-block list" -msgstr "Débloquer liste" +msgstr "Débloquer la liste" #: src/view/screens/ProfileList.tsx:458 msgid "Un-mute list" -msgstr "Désactiver sourdine sur cette liste" +msgstr "Réafficher cette liste" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "Impossible de contacter votre service. Veuillez vérifier votre connexion Internet." @@ -2222,23 +2302,23 @@ msgstr "Débloquer" #: src/view/com/profile/ProfileHeader.tsx:304 #: src/view/com/profile/ProfileHeader.tsx:388 msgid "Unblock Account" -msgstr "Débloquer compte" +msgstr "Débloquer le compte" #: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 msgid "Undo repost" -msgstr "Annuler transfert" +msgstr "Annuler le repost" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "Malheureusement, vous ne remplissez pas les conditions requises pour créer un compte." #: src/view/com/profile/ProfileHeader.tsx:369 msgid "Unmute Account" -msgstr "Désactiver sourdine sur ce compte" +msgstr "Réafficher ce compte" #: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" -msgstr "Désactiver sourdine sur ce fil de discussion" +msgstr "Réafficher ce fil de discussion" #: src/view/screens/ProfileList.tsx:441 msgid "Unpin moderation list" @@ -2254,7 +2334,7 @@ msgstr "Mise à jour disponible" #: src/view/com/auth/login/SetNewPasswordForm.tsx:172 msgid "Updating..." -msgstr "Mise à jour..." +msgstr "Mise à jour…" #: src/view/com/modals/ChangeHandle.tsx:453 msgid "Upload a text file to:" @@ -2284,8 +2364,8 @@ msgstr "Pseudo utilisateur" msgid "User Lists" msgstr "Listes d’utilisateurs" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "Nom d’utilisateur ou e-mail" @@ -2299,24 +2379,24 @@ msgstr "utilisateurs suivis par <0/>" #: src/view/com/modals/Threadgate.tsx:106 msgid "Users in \"{0}\"" -msgstr "Utilisateurs dans \"{0}\"" +msgstr "Utilisateurs dans « {0} »" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" -msgstr "Confirmer e-mail" +msgstr "Confirmer l’e-mail" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "Confirmer mon e-mail" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "Confirmer mon e-mail" #: src/view/com/modals/ChangeEmail.tsx:205 #: src/view/com/modals/ChangeEmail.tsx:207 msgid "Verify New Email" -msgstr "Confirmer nouvel e-mail" +msgstr "Confirmer le nouvel e-mail" #: src/view/screens/Log.tsx:52 msgid "View debug entry" @@ -2324,7 +2404,7 @@ msgstr "Afficher l’entrée de débogage" #: src/view/com/profile/ProfileSubpageHeader.tsx:128 msgid "View the avatar" -msgstr "Afficher avatar" +msgstr "Afficher l’avatar" #: src/view/com/modals/LinkWarning.tsx:73 msgid "Visit Site" @@ -2351,16 +2431,12 @@ msgid "What is the issue with this {collectionName}?" msgstr "Quel est le problème avec cette {collectionName} ?" #: src/view/com/auth/SplashScreen.tsx:34 -#~ msgid "What's next?" -#~ msgstr "Et après ?" - -#: src/view/com/auth/SplashScreen.tsx:34 msgid "What's up?" -msgstr "" +msgstr "Quoi de neuf ?" #: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 msgid "Which languages are used in this post?" -msgstr "Quelles sont les langues utilisées dans cette publication ?" +msgstr "Quelles sont les langues utilisées dans ce post ?" #: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 msgid "Which languages would you like to see in your algorithmic feeds?" @@ -2375,18 +2451,20 @@ msgstr "Qui peut répondre ?" msgid "Wide" msgstr "Large" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" -msgstr "Rédiger une publication" +msgstr "Rédiger un post" #: src/view/com/composer/Prompt.tsx:33 msgid "Write your reply" msgstr "Rédigez votre réponse" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "Oui" @@ -2417,7 +2495,7 @@ msgstr "Vous n’avez encore aucun fil enregistré." #: src/view/com/post-thread/PostThread.tsx:381 msgid "You have blocked the author or you have been blocked by the author." -msgstr "Vous avez bloqué cet auteur ou il/elle vous a bloqué." +msgstr "Vous avez bloqué cet auteur ou vous avez été bloqué par celui-ci." #: src/view/com/feeds/ProfileFeedgens.tsx:134 msgid "You have no feeds." @@ -2430,7 +2508,7 @@ msgstr "Vous n’avez aucune liste." #: src/view/screens/ModerationBlockedAccounts.tsx:132 msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." -msgstr "Vous n’avez pas encore bloqué de comptes. Pour bloquer un compte, accédez à son profil et sélectionnez « Bloquer compte » dans le menu de son compte." +msgstr "Vous n’avez pas encore bloqué de comptes. Pour bloquer un compte, accédez à son profil et sélectionnez « Bloquer le compte » dans le menu de son compte." #: src/view/screens/AppPasswords.tsx:86 msgid "You have not created any app passwords yet. You can create one by pressing the button below." @@ -2438,7 +2516,7 @@ msgstr "Vous n’avez encore créé aucun mot de passe pour l’appli. Vous pouv #: src/view/screens/ModerationMutedAccounts.tsx:131 msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." -msgstr "Vous n’avez encore mis aucun compte en sourdine. Pour désactiver un compte, allez sur son profil et sélectionnez « Désactiver compte » dans le menu de son compte." +msgstr "Vous n’avez encore masqué aucun compte. Pour désactiver un compte, allez sur son profil et sélectionnez « Masquer le compte » dans le menu de son compte." #: src/view/com/auth/login/SetNewPasswordForm.tsx:81 msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." @@ -2485,7 +2563,7 @@ msgstr "Vos codes d’invitation sont cachés lorsque vous êtes connecté à lâ #: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 msgid "Your posts, likes, and blocks are public. Mutes are private." -msgstr "Vos publications, les mentions « J’aime » et les blocages sont publics. Les sourdines sont privées." +msgstr "Vos posts, les mentions « J’aime » et les blocages sont publics. Les silences (comptes masqués) sont privés." #: src/view/com/modals/SwitchAccount.tsx:82 msgid "Your profile" diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index ab67ff125..793175dea 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -88,7 +88,7 @@ msgstr "à¤à¤ª का à¤à¤• नया संसà¥à¤•रण उपलबà¥à¤§ msgid "Accessibility" msgstr "पà¥à¤°à¤µà¥‡à¤°à¥à¤¶à¤¯à¥‹à¤—à¥à¤¯à¤¤à¤¾" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "अकाउंट" @@ -118,6 +118,7 @@ msgstr "अकाउंट जोड़ें" #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "इस फ़ोटो में विवरण जोड़ें" @@ -130,11 +131,11 @@ msgstr "विवरण जोड़ें" msgid "Add details to report" msgstr "रिपोरà¥à¤Ÿ करने के लिठविवरण जोड़ें" -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" msgstr "लिंक कारà¥à¤¡ जोड़ें" -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" msgstr "लिंक कारà¥à¤¡ जोड़ें:" @@ -155,7 +156,7 @@ msgstr "इस फ़ीड को सहेजें" msgid "Added to list" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "पसंद की संखà¥à¤¯à¤¾ को समायोजित करें उतà¥à¤¤à¤° को आपके फ़ीड में दिखाया जाना चाहिà¤à¥¤à¥¤" @@ -163,7 +164,7 @@ msgstr "पसंद की संखà¥à¤¯à¤¾ को समायोजित à msgid "Adult Content" msgstr "वयसà¥à¤• सामगà¥à¤°à¥€" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "विकसित" @@ -196,7 +197,7 @@ msgstr "और" msgid "App Language" msgstr "à¤à¤ª à¤à¤¾à¤·à¤¾" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" msgstr "à¤à¤ª पासवरà¥à¤¡" @@ -236,7 +237,7 @@ msgstr "दिखावट" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "कà¥à¤¯à¤¾ आप वाकई à¤à¤ª पासवरà¥à¤¡ \"{name}\" हटाना चाहते हैं?" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "कà¥à¤¯à¤¾ आप वाकई इस डà¥à¤°à¤¾à¤«à¥à¤Ÿ को हटाना करना चाहेंगे?" @@ -259,7 +260,7 @@ msgstr "कलातà¥à¤®à¤• या गैर-कामà¥à¤• नगà¥à¤¨à¤¤à¤ #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -355,7 +356,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "Build version {0} {1}" @@ -373,9 +374,8 @@ msgstr "कैमरा" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "केवल अकà¥à¤·à¤°, संखà¥à¤¯à¤¾, रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨, डैश और अंडरसà¥à¤•ोर हो सकते हैं। कम से कम 4 अकà¥à¤·à¤° लंबा होना चाहिà¤, लेकिन 32 अकà¥à¤·à¤°à¥‹à¤‚ से अधिक लंबा नहीं होना चाहिà¤à¥¤à¥¤" -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -399,8 +399,8 @@ msgid "Cancel account deletion" msgstr "अकाउंट बंद मत करो" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ मत जोड़ें" +#~ msgid "Cancel add image alt text" +#~ msgstr "ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ मत जोड़ें" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" @@ -431,8 +431,8 @@ msgstr "पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ सूची पंजीकरण मत ठmsgid "Change" msgstr "परिवरà¥à¤¤à¤¨" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" msgstr "हैंडल बदलें" @@ -476,19 +476,19 @@ msgstr "उन à¤à¤²à¥à¤—ोरिदम का चयन करें जो msgid "Choose your password" msgstr "अपना पासवरà¥à¤¡ चà¥à¤¨à¥‡à¤‚" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "" @@ -529,8 +529,8 @@ msgstr "जवाब लिखो" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "हो गया" @@ -554,7 +554,7 @@ msgid "Confirmation code" msgstr "OTP कोड" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग ..।" @@ -644,7 +644,11 @@ msgstr "बनाया गया {0}" msgid "Custom domain" msgstr "कसà¥à¤Ÿà¤® डोमेन" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "खतरा कà¥à¤·à¥‡à¤¤à¥à¤°" @@ -652,7 +656,7 @@ msgstr "खतरा कà¥à¤·à¥‡à¤¤à¥à¤°" #~ msgid "Dark" #~ msgstr "डारà¥à¤• मोड" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" msgstr "खाता हटाà¤à¤‚" @@ -674,7 +678,7 @@ msgstr "सूची हटाà¤à¤" msgid "Delete my account" msgstr "मेरा खाता हटाà¤à¤‚" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" msgstr "मेरा खाता हटाà¤à¤‚…" @@ -701,19 +705,19 @@ msgstr "विवरण" msgid "Dev Server" msgstr "देव सरà¥à¤µà¤°" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" msgstr "डेवलपर उपकरण" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" msgstr "" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" msgstr "डà¥à¤°à¤¾à¤«à¥à¤Ÿ हटाà¤à¤‚" @@ -738,6 +742,7 @@ msgid "Domain verified!" msgstr "डोमेन सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤!" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -747,8 +752,8 @@ msgstr "डोमेन सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤!" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "खतà¥à¤®" @@ -809,7 +814,15 @@ msgstr "ईमेल अपडेट किया गया" msgid "Email:" msgstr "ईमेल:" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सकà¥à¤·à¤® करें जिनà¥à¤¹à¥‡à¤‚ आप फॉलो करते हैं।।" @@ -853,6 +866,20 @@ msgstr "" msgid "Expand alt text" msgstr "ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -900,7 +927,7 @@ msgstr "" msgid "Finding similar accounts..." msgstr "मिलते-जà¥à¤²à¤¤à¥‡ खाते ढूà¤à¤¢à¤¨à¤¾" -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "अपने मà¥à¤–à¥à¤¯ फ़ीड की सà¥à¤•à¥à¤°à¥€à¤¨ पर दिखाई देने वाली सामगà¥à¤°à¥€ को ठीक करें।।" @@ -920,7 +947,7 @@ msgstr "आरंठकरने के लिठकà¥à¤› उपयोगकà msgid "Followed users" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "केवल वे यूजर को फ़ॉलो किया गया" @@ -949,11 +976,11 @@ msgstr "सà¥à¤°à¤•à¥à¤·à¤¾ कारणों के लिà¤, हमें msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "सà¥à¤°à¤•à¥à¤·à¤¾ कारणों के लिà¤, आप इसे फिर से देखने में सकà¥à¤·à¤® नहीं होंगे। यदि आप इस पासवरà¥à¤¡ को खो देते हैं, तो आपको à¤à¤• नया उतà¥à¤ªà¤¨à¥à¤¨ करना होगा।।" -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "à¤à¥‚ल" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "पासवरà¥à¤¡ à¤à¥‚ल गà¤" @@ -985,7 +1012,7 @@ msgid "Go Back" msgstr "वापस जाओ" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "अगला" @@ -1056,7 +1083,7 @@ msgid "Home" msgstr "होम फीड" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "होम फ़ीड पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ताà¤à¤‚" @@ -1096,7 +1123,7 @@ msgstr "छवि विकलà¥à¤ª" #~ msgid "In Your Network" #~ msgstr "आपके नेटवरà¥à¤• में" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "अवैध उपयोगकरà¥à¤¤à¤¾ नाम या पासवरà¥à¤¡" @@ -1321,6 +1348,10 @@ msgstr "अधिक विकलà¥à¤ª" #~ msgid "More post options" #~ msgstr "पोसà¥à¤Ÿ विकलà¥à¤ª" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "खाता मà¥à¤¯à¥‚ट करें" @@ -1382,6 +1413,11 @@ msgstr "मेरी फ़ीड" msgid "Name" msgstr "नाम" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "अपने फ़ॉलोअरà¥à¤¸ और डेटा तक पहà¥à¤‚च कà¤à¥€ न खोà¤à¤‚।" @@ -1405,10 +1441,14 @@ msgstr "नई पोसà¥à¤Ÿ" msgid "New Post" msgstr "नई पोसà¥à¤Ÿ" +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "" + #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1419,10 +1459,12 @@ msgstr "अगला" msgid "Next image" msgstr "अगली फोटो" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "नहीं" @@ -1452,6 +1494,10 @@ msgstr "\"{query}\" के लिठकोई परिणाम नहीं à msgid "No results found for {query}" msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "" @@ -1493,7 +1539,11 @@ msgstr "अरे नहीं!" msgid "Okay" msgstr "ठीक है" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "à¤à¤• या अधिक छवियाठalt पाठयाद आती हैं।।" @@ -1501,6 +1551,11 @@ msgstr "à¤à¤• या अधिक छवियाठalt पाठयाद ठmsgid "Only {0} can reply." msgstr "" +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "ओपन नेविगेशन" @@ -1509,6 +1564,10 @@ msgstr "ओपन नेविगेशन" msgid "Opens configurable language settings" msgstr "à¤à¤¾à¤·à¤¾ सेटिंगà¥à¤¸ खोलें" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1526,7 +1585,7 @@ msgstr "मॉडरेशन सेटिंगà¥à¤¸ खोलें" msgid "Opens screen with all saved feeds" msgstr "सà¤à¥€ बचाया फ़ीड के साथ सà¥à¤•à¥à¤°à¥€à¤¨ खोलें" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "à¤à¤ª पासवरà¥à¤¡ सेटिंग पेज खोलें" @@ -1534,11 +1593,11 @@ msgstr "à¤à¤ª पासवरà¥à¤¡ सेटिंग पेज खोलेठmsgid "Opens the home feed preferences" msgstr "होम फीड वरीयताओं को खोलता है" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "सà¥à¤Ÿà¥‹à¤°à¥€à¤¬à¥à¤• पेज खोलें" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "सिसà¥à¤Ÿà¤® लॉग पेज खोलें" @@ -1569,7 +1628,7 @@ msgstr "पृषà¥à¤ नहीं मिला" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1591,6 +1650,19 @@ msgstr "चितà¥à¤° वयसà¥à¤•ों के लिठथे।।" msgid "Pinned Feeds" msgstr "पिन किया गया फ़ीड" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "" @@ -1625,11 +1697,11 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "" -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" msgstr "" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" @@ -1667,16 +1739,17 @@ msgstr "पिछली छवि" msgid "Primary Language" msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• à¤à¤¾à¤·à¤¾" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "अपने फ़ॉलोअरà¥à¤¸ को पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ता दें" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "गोपनीयता" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "गोपनीयता नीति" @@ -1693,7 +1766,7 @@ msgstr "पà¥à¤°à¤¸à¤‚सà¥à¤•रण..." msgid "Profile" msgstr "पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤²" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "अपने ईमेल को सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करके अपने खाते को सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखें।।" @@ -1714,6 +1787,10 @@ msgstr "कोटे पोसà¥à¤Ÿ" msgid "Quote Post" msgstr "कोटे पोसà¥à¤Ÿ" +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "" + #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" msgstr "अनà¥à¤ªà¤¾à¤¤" @@ -1786,7 +1863,7 @@ msgstr "" msgid "Replies to this thread are disabled" msgstr "" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "फिलà¥à¤Ÿà¤°" @@ -1833,9 +1910,9 @@ msgstr "अनà¥à¤°à¥‹à¤§ बदलें" #~ msgid "Request to limit the visibility of my account" #~ msgstr "" -#: src/view/screens/Settings.tsx:382 -#~ msgid "Require alt text before posting" -#~ msgstr "पोसà¥à¤Ÿ करने से पहले वैकलà¥à¤ªà¤¿à¤• टेकà¥à¤¸à¥à¤Ÿ की आवशà¥à¤¯à¤•ता है" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "पोसà¥à¤Ÿ करने से पहले वैकलà¥à¤ªà¤¿à¤• टेकà¥à¤¸à¥à¤Ÿ की आवशà¥à¤¯à¤•ता है" #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" @@ -1845,7 +1922,7 @@ msgstr "इस पà¥à¤°à¤¦à¤¾à¤¤à¤¾ के लिठआवशà¥à¤¯à¤•" msgid "Reset code" msgstr "कोड रीसेट करें" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "ऑनबोरà¥à¤¡à¤¿à¤‚ग सà¥à¤Ÿà¥‡à¤Ÿ को रीसेट करें" @@ -1853,22 +1930,22 @@ msgstr "ऑनबोरà¥à¤¡à¤¿à¤‚ग सà¥à¤Ÿà¥‡à¤Ÿ को रीसेट ठmsgid "Reset password" msgstr "पासवरà¥à¤¡ रीसेट" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ताओं को रीसेट करें" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "ऑनबोरà¥à¤¡à¤¿à¤‚ग सà¥à¤Ÿà¥‡à¤Ÿ को रीसेट करें" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ताओं की सà¥à¤¥à¤¿à¤¤à¤¿ को रीसेट करें" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" @@ -1878,7 +1955,6 @@ msgstr "फिर से कोशिश करो" #~ msgid "Retry change handle" #~ msgstr "हैंडल बदलना फिर से कोशिश करो" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1950,7 +2026,7 @@ msgstr "Bluesky Social का चयन करें" msgid "Select from an existing account" msgstr "मौजूदा खाते से चà¥à¤¨à¥‡à¤‚" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "सेवा चà¥à¤¨à¥‡à¤‚" @@ -1991,23 +2067,23 @@ msgstr "रिपोरà¥à¤Ÿ à¤à¥‡à¤œà¥‡à¤‚" msgid "Set new password" msgstr "नया पासवरà¥à¤¡ सेट करें" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." msgstr "अपने फ़ीड से सà¤à¥€ उदà¥à¤§à¤°à¤£ पदों को छिपाने के लिठइस सेटिंग को \"नहीं\" में सेट करें। Reposts अà¤à¥€ à¤à¥€ दिखाई देगा।।" -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." msgstr "इस सेटिंग को अपने फ़ीड से सà¤à¥€ उतà¥à¤¤à¤°à¥‹à¤‚ को छिपाने के लिठ\"नहीं\" पर सेट करें।।" -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." msgstr "इस सेटिंग को अपने फ़ीड से सà¤à¥€ पोसà¥à¤Ÿ छिपाने के लिठ\"नहीं\" करने के लिठसेट करें।।" -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "इस सेटिंग को \"हाà¤\" में सेट करने के लिठà¤à¤• थà¥à¤°à¥‡à¤¡à¥‡à¤¡ वà¥à¤¯à¥‚ में जवाब दिखाने के लिà¤à¥¤ यह à¤à¤• पà¥à¤°à¤¯à¥‹à¤—ातà¥à¤®à¤• विशेषता है।।" -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." msgstr "इस सेटिंग को अपने निमà¥à¤¨à¤²à¤¿à¤–ित फ़ीड में अपने सहेजे गठफ़ीड के नमूने दिखाने के लिठ\"हाà¤\" पर सेट करें। यह à¤à¤• पà¥à¤°à¤¯à¥‹à¤—ातà¥à¤®à¤• विशेषता है।।" @@ -2045,23 +2121,27 @@ msgstr "दिखाओ" msgid "Show anyway" msgstr "दिखाओ" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" msgstr "मेरी फीड से पोसà¥à¤Ÿ दिखाà¤à¤‚" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" msgstr "उदà¥à¤§à¤°à¤£ पोसà¥à¤Ÿ दिखाओ" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" msgstr "उतà¥à¤¤à¤° दिखाà¤à¤" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "अनà¥à¤¯ सà¤à¥€ उतà¥à¤¤à¤°à¥‹à¤‚ से पहले उन लोगों के उतà¥à¤¤à¤° दिखाà¤à¤‚ जिनà¥à¤¹à¥‡à¤‚ आप फ़ॉलो करते हैं।" -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" msgstr "रीपोसà¥à¤Ÿ दिखाà¤à¤" @@ -2098,7 +2178,7 @@ msgstr "{0} के रूप में साइन इन करें" msgid "Sign in as..." msgstr "... के रूप में साइन इन करें" -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "साइन इन करें" @@ -2152,11 +2232,11 @@ msgstr "सà¥à¤•à¥à¤µà¤¾à¤¯à¤°" msgid "Staging" msgstr "सà¥à¤Ÿà¥‡à¤œà¤¿à¤‚ग" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "सà¥à¤¥à¤¿à¤¤à¤¿ पृषà¥à¤ " -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "Storybook" @@ -2189,7 +2269,7 @@ msgstr "खाते बदलें" #~ msgid "System" #~ msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "सिसà¥à¤Ÿà¤® लॉग" @@ -2201,7 +2281,7 @@ msgstr "लंबा" msgid "Terms" msgstr "शरà¥à¤¤à¥‡à¤‚" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2256,6 +2336,10 @@ msgstr "यह {screenDescription} फà¥à¤²à¥ˆà¤— किया गया है msgid "This account has requested that users sign in to view their profile." msgstr "" +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "" @@ -2297,7 +2381,7 @@ msgstr "" msgid "Thread Preferences" msgstr "थà¥à¤°à¥‡à¤¡ पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ता" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "थà¥à¤°à¥‡à¤¡ मोड" @@ -2329,7 +2413,7 @@ msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "आपकी सेवा से संपरà¥à¤• करने में असमरà¥à¤¥à¥¤ कृपया अपने इंटरनेट कनेकà¥à¤¶à¤¨ की जांच करें।।" @@ -2347,7 +2431,7 @@ msgstr "अनबà¥à¤²à¥‰à¤• खाता" msgid "Undo repost" msgstr "पà¥à¤¨à¤ƒ पोसà¥à¤Ÿ पूरà¥à¤µà¤µà¤¤ करें" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "" @@ -2403,8 +2487,8 @@ msgstr "यूजर हैंडल" msgid "User Lists" msgstr "लोग सूचियाà¤" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "यूजर नाम या ईमेल पता" @@ -2424,15 +2508,15 @@ msgstr "" msgid "Users in \"{0}\"" msgstr "" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" msgstr "ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "मेरी ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "मेरी ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" @@ -2506,7 +2590,7 @@ msgstr "" msgid "Wide" msgstr "चौड़ा" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" msgstr "पोसà¥à¤Ÿ लिखो" @@ -2514,10 +2598,12 @@ msgstr "पोसà¥à¤Ÿ लिखो" msgid "Write your reply" msgstr "अपना जवाब दें" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "हाà¤" diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po index c9d5573aa..9620c035a 100644 --- a/src/locale/locales/ja/messages.po +++ b/src/locale/locales/ja/messages.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: @lingui/cli\n" -"Language: jp\n" +"Language: ja\n" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: \n" @@ -68,7 +68,7 @@ msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¢ãƒ—リãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚継続ã—㦠msgid "Accessibility" msgstr "アクセシビリティ" -#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/com/auth/login/LoginForm.tsx:163 #: src/view/screens/Settings.tsx:286 msgid "Account" msgstr "アカウント" @@ -98,6 +98,7 @@ msgstr "ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’è¿½åŠ " #: src/view/com/composer/photos/Gallery.tsx:119 #: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 msgid "Add alt text" msgstr "ALTテã‚ã‚¹ãƒˆã‚’è¿½åŠ " @@ -110,11 +111,11 @@ msgstr "è©³ç´°ã‚’è¿½åŠ " msgid "Add details to report" msgstr "レãƒãƒ¼ãƒˆã«è©³ç´°ã‚’è¿½åŠ " -#: src/view/com/composer/Composer.tsx:442 +#: src/view/com/composer/Composer.tsx:447 msgid "Add link card" msgstr "ãƒªãƒ³ã‚¯ã‚«ãƒ¼ãƒ‰ã‚’è¿½åŠ " -#: src/view/com/composer/Composer.tsx:445 +#: src/view/com/composer/Composer.tsx:450 msgid "Add link card:" msgstr "ãƒªãƒ³ã‚¯ã‚«ãƒ¼ãƒ‰ã‚’è¿½åŠ ï¼š" @@ -135,7 +136,7 @@ msgstr "マイフィードã«è¿½åŠ " msgid "Added to list" msgstr "リストã«è¿½åŠ " -#: src/view/screens/PreferencesHomeFeed.tsx:164 +#: src/view/screens/PreferencesHomeFeed.tsx:170 msgid "Adjust the number of likes a reply must have to be shown in your feed." msgstr "返信ãŒãƒ•ィードã«è¡¨ç¤ºã•れるãŸã‚ã«å¿…è¦ãªã€Œã„ã„ãã€ã®æ•°ã‚’調整ã—ã¾ã™ã€‚" @@ -143,7 +144,7 @@ msgstr "返信ãŒãƒ•ィードã«è¡¨ç¤ºã•れるãŸã‚ã«å¿…è¦ãªã€Œã„ã„ã〠msgid "Adult Content" msgstr "æˆäººå‘ã‘コンテンツ" -#: src/view/screens/Settings.tsx:569 +#: src/view/screens/Settings.tsx:602 msgid "Advanced" msgstr "高度ãªè¨å®š" @@ -176,7 +177,7 @@ msgstr "ãŠã‚ˆã³" msgid "App Language" msgstr "アプリã®è¨€èªž" -#: src/view/screens/Settings.tsx:589 +#: src/view/screens/Settings.tsx:622 msgid "App passwords" msgstr "アプリパスワード" @@ -212,7 +213,7 @@ msgstr "外観" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "本当ã«ã‚¢ãƒ—リパスワード「{name}ã€ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" -#: src/view/com/composer/Composer.tsx:142 +#: src/view/com/composer/Composer.tsx:143 msgid "Are you sure you'd like to discard this draft?" msgstr "本当ã«ã“ã®ä¸‹æ›¸ãã‚’ç ´æ£„ã—ã¾ã™ã‹ï¼Ÿ" @@ -231,7 +232,7 @@ msgstr "芸術的ã¾ãŸã¯æ€§çš„ã§ã¯ãªã„ヌード。" #: src/view/com/auth/create/CreateAccount.tsx:141 #: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 -#: src/view/com/auth/login/LoginForm.tsx:250 +#: src/view/com/auth/login/LoginForm.tsx:254 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:46 #: src/view/com/post-thread/PostThread.tsx:388 @@ -327,7 +328,7 @@ msgstr "Blueskyã¯ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ãªãŸã®ãƒ—ãƒãƒ•ィムmsgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:718 +#: src/view/screens/Settings.tsx:751 msgid "Build version {0} {1}" msgstr "ビルドãƒãƒ¼ã‚¸ãƒ§ãƒ³ {0} {1}" @@ -345,9 +346,8 @@ msgstr "カメラ" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "æ–‡å—ã€æ•°å—ã€ã‚¹ãƒšãƒ¼ã‚¹ã€ãƒã‚¤ãƒ•ンã€ãŠã‚ˆã³ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã®ã¿ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚é•·ã•ã¯4æ–‡å—以上32æ–‡å—以下ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" -#: src/view/com/composer/Composer.tsx:289 -#: src/view/com/composer/Composer.tsx:292 -#: src/view/com/modals/AltImage.tsx:128 +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -371,8 +371,8 @@ msgid "Cancel account deletion" msgstr "アカウントã®å‰Šé™¤ã‚’ã‚ャンセル" #: src/view/com/modals/AltImage.tsx:123 -msgid "Cancel add image alt text" -msgstr "ç”»åƒã®ALTテã‚ストã®è¿½åŠ ã‚’ã‚ャンセル" +#~ msgid "Cancel add image alt text" +#~ msgstr "ç”»åƒã®ALTテã‚ストã®è¿½åŠ ã‚’ã‚ャンセル" #: src/view/com/modals/ChangeHandle.tsx:149 msgid "Cancel change handle" @@ -403,8 +403,8 @@ msgstr "Waitlistã®ç™»éŒ²ã‚’ã‚ャンセル" msgid "Change" msgstr "変更" -#: src/view/screens/Settings.tsx:601 -#: src/view/screens/Settings.tsx:610 +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 msgid "Change handle" msgstr "ãƒãƒ³ãƒ‰ãƒ«ã‚’変更" @@ -434,7 +434,7 @@ msgstr "入力ã—ãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å—信トレイを確èªã—ã¦ã€ä»¥ #: src/view/com/modals/Threadgate.tsx:72 msgid "Choose \"Everybody\" or \"Nobody\"" -msgstr "" +msgstr "「全員ã€ã¨ã€Œè¿”ä¿¡ä¸å¯ã€ã®ã©ã¡ã‚‰ã‹ã‚’é¸æŠž" #: src/view/com/modals/ServerInput.tsx:38 msgid "Choose Service" @@ -448,19 +448,19 @@ msgstr "カスタムフィードを使用ã—ã¦ã‚ãªãŸã®ä½“験を強化ã™ã‚‹ msgid "Choose your password" msgstr "ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠž" -#: src/view/screens/Settings.tsx:694 +#: src/view/screens/Settings.tsx:727 msgid "Clear all legacy storage data" msgstr "レガシーストレージデータをã™ã¹ã¦ã‚¯ãƒªã‚¢" -#: src/view/screens/Settings.tsx:696 +#: src/view/screens/Settings.tsx:729 msgid "Clear all legacy storage data (restart after this)" msgstr "ã™ã¹ã¦ã®ãƒ¬ã‚¬ã‚·ãƒ¼ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’クリア(ã“ã®å¾Œå†èµ·å‹•ã—ã¾ã™ï¼‰" -#: src/view/screens/Settings.tsx:706 +#: src/view/screens/Settings.tsx:739 msgid "Clear all storage data" msgstr "ã™ã¹ã¦ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’クリア" -#: src/view/screens/Settings.tsx:708 +#: src/view/screens/Settings.tsx:741 msgid "Clear all storage data (restart after this)" msgstr "ã™ã¹ã¦ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’クリア(ã“ã®å¾Œå†èµ·å‹•ã—ã¾ã™ï¼‰" @@ -501,8 +501,8 @@ msgstr "返信を作æˆ" #: src/view/com/modals/Confirm.tsx:75 #: src/view/com/modals/SelfLabel.tsx:154 #: src/view/com/modals/VerifyEmail.tsx:225 -#: src/view/screens/PreferencesHomeFeed.tsx:299 -#: src/view/screens/PreferencesThreads.tsx:153 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 msgid "Confirm" msgstr "確èª" @@ -526,7 +526,7 @@ msgid "Confirmation code" msgstr "確èªã‚³ãƒ¼ãƒ‰" #: src/view/com/auth/create/CreateAccount.tsx:174 -#: src/view/com/auth/login/LoginForm.tsx:269 +#: src/view/com/auth/login/LoginForm.tsx:273 msgid "Connecting..." msgstr "接続ä¸..." @@ -616,11 +616,15 @@ msgstr "ä½œæˆæ¸ˆã¿ {0}" msgid "Custom domain" msgstr "カスタムドメイン" -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 msgid "Danger Zone" msgstr "å±é™ºåœ°å¸¯" -#: src/view/screens/Settings.tsx:622 +#: src/view/screens/Settings.tsx:655 msgid "Delete account" msgstr "アカウントを削除" @@ -642,7 +646,7 @@ msgstr "リストを削除" msgid "Delete my account" msgstr "マイアカウントを削除" -#: src/view/screens/Settings.tsx:632 +#: src/view/screens/Settings.tsx:665 msgid "Delete my account…" msgstr "マイアカウントを削除…" @@ -669,19 +673,19 @@ msgstr "説明" msgid "Dev Server" msgstr "開発者サーãƒãƒ¼" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:670 msgid "Developer Tools" msgstr "開発者ツール" -#: src/view/com/composer/Composer.tsx:210 +#: src/view/com/composer/Composer.tsx:211 msgid "Did you want to say anything?" msgstr "" -#: src/view/com/composer/Composer.tsx:143 +#: src/view/com/composer/Composer.tsx:144 msgid "Discard" msgstr "ç ´æ£„" -#: src/view/com/composer/Composer.tsx:137 +#: src/view/com/composer/Composer.tsx:138 msgid "Discard draft" msgstr "下書ãã‚’ç ´æ£„" @@ -706,6 +710,7 @@ msgid "Domain verified!" msgstr "ドメインを確èªã—ã¾ã—ãŸï¼" #: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/ContentFilteringSettings.tsx:88 #: src/view/com/modals/ContentFilteringSettings.tsx:96 #: src/view/com/modals/crop-image/CropImage.web.tsx:152 @@ -715,8 +720,8 @@ msgstr "ドメインを確èªã—ã¾ã—ãŸï¼" #: src/view/com/modals/Threadgate.tsx:129 #: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 -#: src/view/screens/PreferencesHomeFeed.tsx:302 -#: src/view/screens/PreferencesThreads.tsx:156 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 msgid "Done" msgstr "完了" @@ -777,7 +782,15 @@ msgstr "メールアドレスを更新" msgid "Email:" msgstr "メールアドレス:" -#: src/view/screens/PreferencesHomeFeed.tsx:138 +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 msgid "Enable this setting to only see replies between people you follow." msgstr "ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã¨ã€è‡ªåˆ†ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã‹ã‚‰ã®è¿”ä¿¡ã ã‘ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" @@ -821,6 +834,20 @@ msgstr "全員" msgid "Expand alt text" msgstr "ALTテã‚ストを展開" +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 msgid "Failed to load recommended feeds" @@ -868,7 +895,7 @@ msgstr "å³å´ã®æ¤œç´¢ãƒ„ールã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’検索" msgid "Finding similar accounts..." msgstr "ä¼¼ã¦ã„るアカウントを検索ä¸..." -#: src/view/screens/PreferencesHomeFeed.tsx:102 +#: src/view/screens/PreferencesHomeFeed.tsx:108 msgid "Fine-tune the content you see on your home screen." msgstr "ホーム画é¢ã«è¡¨ç¤ºã•れるコンテンツを微調整ã—ã¾ã™ã€‚" @@ -888,7 +915,7 @@ msgstr "何人ã‹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フォãƒãƒ¼ã—ã¦é–‹å§‹ã—ã¾ã™ã€‚興味を msgid "Followed users" msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザー" -#: src/view/screens/PreferencesHomeFeed.tsx:145 +#: src/view/screens/PreferencesHomeFeed.tsx:151 msgid "Followed users only" msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã®ã¿" @@ -917,11 +944,11 @@ msgstr "ã‚»ã‚ュリティ上ã®ç†ç”±ã‹ã‚‰ã€ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ç¢ºèªã‚³ msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "ã‚»ã‚ュリティ上ã®ç†ç”±ã‹ã‚‰ã€ã“れをå†åº¦è¡¨ç¤ºã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã“ã®ãƒ‘スワードを紛失ã—ãŸå ´åˆã¯ã€æ–°ã—ã„パスワードを生æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" -#: src/view/com/auth/login/LoginForm.tsx:232 +#: src/view/com/auth/login/LoginForm.tsx:236 msgid "Forgot" msgstr "忘れãŸ" -#: src/view/com/auth/login/LoginForm.tsx:229 +#: src/view/com/auth/login/LoginForm.tsx:233 msgid "Forgot password" msgstr "パスワードを忘れãŸ" @@ -953,7 +980,7 @@ msgid "Go Back" msgstr "戻る" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/LoginForm.tsx:283 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "次ã¸" @@ -978,11 +1005,11 @@ msgstr "éžè¡¨ç¤º" #: src/view/com/util/forms/PostDropdownBtn.tsx:173 msgid "Hide post" -msgstr "" +msgstr "投稿をéžè¡¨ç¤ºã«ã™ã‚‹" #: src/view/com/util/forms/PostDropdownBtn.tsx:177 msgid "Hide this post?" -msgstr "" +msgstr "ã“ã®æŠ•ç¨¿ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™ã‹ï¼Ÿ" #: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" @@ -1016,7 +1043,7 @@ msgid "Home" msgstr "ホーム" #: src/view/com/pager/FeedsTabBarMobile.tsx:96 -#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/PreferencesHomeFeed.tsx:101 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" msgstr "ホームフィードã®è¨å®š" @@ -1051,7 +1078,7 @@ msgstr "ç”»åƒã®ALTテã‚スト" msgid "Image options" msgstr "ç”»åƒã®ã‚ªãƒ—ション" -#: src/view/com/auth/login/LoginForm.tsx:113 +#: src/view/com/auth/login/LoginForm.tsx:115 msgid "Invalid username or password" msgstr "無効ãªãƒ¦ãƒ¼ã‚¶ãƒ¼åã¾ãŸã¯ãƒ‘スワード" @@ -1204,7 +1231,7 @@ msgstr "ãƒãƒ¼ã‚«ãƒ«é–‹ç™ºè€…サーãƒãƒ¼" #: src/view/screens/Moderation.tsx:136 msgid "Logged-out visibility" -msgstr "ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸçŠ¶æ…‹ã®å¯è¦–性" +msgstr "ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®å¯è¦–性" #: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" @@ -1264,6 +1291,10 @@ msgstr "ãã®ä»–ã®ãƒ•ィード" msgid "More options" msgstr "ãã®ä»–ã®ã‚ªãƒ—ション" +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "ã„ã„ãã®æ•°ãŒå¤šã„é †ã«è¿”信を表示" + #: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "アカウントをミュート" @@ -1321,6 +1352,11 @@ msgstr "ä¿å˜ã•れãŸãƒ•ィード" msgid "Name" msgstr "åå‰" +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + #: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 msgid "Never lose access to your followers and data." msgstr "フォãƒãƒ¯ãƒ¼ã‚„データã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’失ã†ã“ã¨ã¯ã‚りã¾ã›ã‚“。" @@ -1344,10 +1380,14 @@ msgstr "æ–°ã—ã„æŠ•ç¨¿" msgid "New Post" msgstr "æ–°ã—ã„æŠ•ç¨¿" +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "æ–°ã—ã„é †ã«è¿”信を表示" + #: src/view/com/auth/create/CreateAccount.tsx:154 #: src/view/com/auth/login/ForgotPasswordForm.tsx:174 #: src/view/com/auth/login/ForgotPasswordForm.tsx:184 -#: src/view/com/auth/login/LoginForm.tsx:282 +#: src/view/com/auth/login/LoginForm.tsx:286 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1358,10 +1398,12 @@ msgstr "次ã¸" msgid "Next image" msgstr "次ã®ç”»åƒ" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:191 -#: src/view/screens/PreferencesHomeFeed.tsx:226 -#: src/view/screens/PreferencesHomeFeed.tsx:263 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "No" msgstr "ã„ã„ãˆ" @@ -1386,6 +1428,10 @@ msgstr "「{query}ã€ã®æ¤œç´¢çµæžœã¯ã‚りã¾ã›ã‚“" msgid "No results found for {query}" msgstr "「{query}ã€ã®æ¤œç´¢çµæžœã¯ã‚りã¾ã›ã‚“" +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + #: src/view/com/modals/Threadgate.tsx:82 msgid "Nobody" msgstr "返信ä¸å¯" @@ -1419,7 +1465,11 @@ msgstr "ã¡ã‚‡ã£ã¨ï¼" msgid "Okay" msgstr "OK" -#: src/view/com/composer/Composer.tsx:358 +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "å¤ã„é †ã«è¿”信を表示" + +#: src/view/com/composer/Composer.tsx:363 msgid "One or more images is missing alt text." msgstr "1ã¤ã‚‚ã—ãã¯è¤‡æ•°ã®ç”»åƒã«ALTテã‚ストãŒã‚りã¾ã›ã‚“。" @@ -1427,6 +1477,11 @@ msgstr "1ã¤ã‚‚ã—ãã¯è¤‡æ•°ã®ç”»åƒã«ALTテã‚ストãŒã‚りã¾ã›ã‚“。" msgid "Only {0} can reply." msgstr "{0}ã®ã¿è¿”ä¿¡å¯èƒ½" +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "絵文å—を入力" + #: src/view/com/pager/FeedsTabBarMobile.tsx:76 msgid "Open navigation" msgstr "ナビゲーションを開ã" @@ -1435,6 +1490,10 @@ msgstr "ナビゲーションを開ã" msgid "Opens configurable language settings" msgstr "æ§‹æˆå¯èƒ½ãªè¨€èªžè¨å®šã‚’é–‹ã" +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + #: src/view/shell/desktop/RightNav.tsx:156 #: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" @@ -1452,7 +1511,7 @@ msgstr "モデレーションã®è¨å®šã‚’é–‹ã" msgid "Opens screen with all saved feeds" msgstr "ä¿å˜ã•れãŸã™ã¹ã¦ã®ãƒ•ィードã§ç”»é¢ã‚’é–‹ã" -#: src/view/screens/Settings.tsx:581 +#: src/view/screens/Settings.tsx:614 msgid "Opens the app password settings page" msgstr "アプリパスワードè¨å®šãƒšãƒ¼ã‚¸ã‚’é–‹ã" @@ -1460,11 +1519,11 @@ msgstr "アプリパスワードè¨å®šãƒšãƒ¼ã‚¸ã‚’é–‹ã" msgid "Opens the home feed preferences" msgstr "ホームフィードã®è¨å®šã‚’é–‹ã" -#: src/view/screens/Settings.tsx:664 +#: src/view/screens/Settings.tsx:697 msgid "Opens the storybook page" msgstr "ストーリーブックã®ãƒšãƒ¼ã‚¸ã‚’é–‹ã" -#: src/view/screens/Settings.tsx:644 +#: src/view/screens/Settings.tsx:677 msgid "Opens the system log page" msgstr "システムãƒã‚°ã®ãƒšãƒ¼ã‚¸ã‚’é–‹ã" @@ -1474,7 +1533,7 @@ msgstr "スレッドã®è¨å®šã‚’é–‹ã" #: src/view/com/modals/Threadgate.tsx:89 msgid "Or combine these options:" -msgstr "" +msgstr "ã¾ãŸã¯ä»¥ä¸‹ã®ã‚ªãƒ—ションを組ã¿åˆã‚ã›ã¦ãã ã•ã„:" #: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" @@ -1495,7 +1554,7 @@ msgstr "ページãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: src/view/com/auth/create/Step2.tsx:122 #: src/view/com/auth/create/Step2.tsx:132 -#: src/view/com/auth/login/LoginForm.tsx:217 +#: src/view/com/auth/login/LoginForm.tsx:221 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1517,6 +1576,19 @@ msgstr "æˆäººå‘ã‘ã®å†™çœŸã§ã™ã€‚" msgid "Pinned Feeds" msgstr "ピン留ã‚ã•れãŸãƒ•ィード" +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + #: src/view/com/auth/create/state.ts:116 msgid "Please choose your handle." msgstr "ãƒãƒ³ãƒ‰ãƒ«ã‚’ãŠé¸ã³ãã ã•ã„。" @@ -1551,11 +1623,11 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "ã“ã®åˆ¤æ–ãŒèª¤ã£ã¦ã„ã‚‹ã¨è€ƒãˆã‚‹ç†ç”±ã‚’æ•™ãˆã¦ãã ã•ã„。" -#: src/view/com/composer/Composer.tsx:214 +#: src/view/com/composer/Composer.tsx:215 msgid "Please wait for your link card to finish loading" -msgstr "" +msgstr "リンクカードãŒãƒãƒ¼ãƒ‰ã•れるã¾ã§ãŠå¾…ã¡ãã ã•ã„" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:346 #: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" @@ -1593,16 +1665,17 @@ msgstr "å‰ã®ç”»åƒ" msgid "Primary Language" msgstr "第一言語" -#: src/view/screens/PreferencesThreads.tsx:91 +#: src/view/screens/PreferencesThreads.tsx:97 msgid "Prioritize Your Follows" msgstr "ã‚ãªãŸã®ãƒ•ã‚©ãƒãƒ¼ã‚’優先" +#: src/view/screens/Settings.tsx:570 #: src/view/shell/desktop/RightNav.tsx:84 msgid "Privacy" msgstr "プライãƒã‚·ãƒ¼" #: src/view/screens/PrivacyPolicy.tsx:29 -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:783 #: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "プライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼" @@ -1619,7 +1692,7 @@ msgstr "処ç†ä¸..." msgid "Profile" msgstr "プãƒãƒ•ィール" -#: src/view/screens/Settings.tsx:808 +#: src/view/screens/Settings.tsx:841 msgid "Protect your account by verifying your email." msgstr "メールアドレスを確èªã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ä¿è·ã—ã¾ã™ã€‚" @@ -1640,6 +1713,10 @@ msgstr "引用" msgid "Quote Post" msgstr "引用" +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "ランダムãªé †ç•ªã§è¡¨ç¤ºï¼ˆåˆ¥å「投稿者ã®ãƒ«ãƒ¼ãƒ¬ãƒƒãƒˆã€ï¼‰" + #: src/view/com/modals/EditImage.tsx:236 msgid "Ratios" msgstr "比率" @@ -1707,7 +1784,7 @@ msgstr "返信" msgid "Replies to this thread are disabled" msgstr "ã“ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¸ã®è¿”ä¿¡ã¯ã§ãã¾ã›ã‚“" -#: src/view/screens/PreferencesHomeFeed.tsx:135 +#: src/view/screens/PreferencesHomeFeed.tsx:141 msgid "Reply Filters" msgstr "返信ã®ãƒ•ィルター" @@ -1750,6 +1827,10 @@ msgstr "リãƒã‚¹ãƒˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" msgid "Request Change" msgstr "å¤‰æ›´ã‚’è¦æ±‚" +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "ç”»åƒæŠ•ç¨¿æ™‚ã«ALTテã‚ã‚¹ãƒˆã‚’å¿…é ˆã¨ã™ã‚‹" + #: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "ã“ã®ãƒ—ãƒãƒã‚¤ãƒ€ãƒ¼ã«å¿…è¦" @@ -1758,7 +1839,7 @@ msgstr "ã“ã®ãƒ—ãƒãƒã‚¤ãƒ€ãƒ¼ã«å¿…è¦" msgid "Reset code" msgstr "コードをリセット" -#: src/view/screens/Settings.tsx:686 +#: src/view/screens/Settings.tsx:719 msgid "Reset onboarding state" msgstr "オンボーディングã®çŠ¶æ…‹ã‚’ãƒªã‚»ãƒƒãƒˆ" @@ -1766,28 +1847,27 @@ msgstr "オンボーディングã®çŠ¶æ…‹ã‚’ãƒªã‚»ãƒƒãƒˆ" msgid "Reset password" msgstr "パスワードをリセット" -#: src/view/screens/Settings.tsx:676 +#: src/view/screens/Settings.tsx:709 msgid "Reset preferences state" msgstr "è¨å®šã‚’リセット" -#: src/view/screens/Settings.tsx:684 +#: src/view/screens/Settings.tsx:717 msgid "Resets the onboarding state" msgstr "オンボーディングã®çŠ¶æ…‹ã‚’ãƒªã‚»ãƒƒãƒˆ" -#: src/view/screens/Settings.tsx:674 +#: src/view/screens/Settings.tsx:707 msgid "Resets the preferences state" msgstr "è¨å®šã®çŠ¶æ…‹ã‚’ãƒªã‚»ãƒƒãƒˆ" #: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/login/LoginForm.tsx:259 -#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" msgstr "å†è©¦è¡Œ" -#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:94 #: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1837,7 +1917,7 @@ msgstr "検索" #: src/view/com/auth/LoggedOut.tsx:104 #: src/view/com/auth/LoggedOut.tsx:105 msgid "Search for users" -msgstr "" +msgstr "ユーザーを検索" #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" @@ -1855,7 +1935,7 @@ msgstr "Bluesky Socialã‚’é¸æŠž" msgid "Select from an existing account" msgstr "æ—¢å˜ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰é¸æŠž" -#: src/view/com/auth/login/LoginForm.tsx:143 +#: src/view/com/auth/login/LoginForm.tsx:147 msgid "Select service" msgstr "ã‚µãƒ¼ãƒ“ã‚¹ã‚’é¸æŠž" @@ -1896,25 +1976,25 @@ msgstr "å ±å‘Šã‚’é€ä¿¡" msgid "Set new password" msgstr "æ–°ã—ã„パスワードをè¨å®š" -#: src/view/screens/PreferencesHomeFeed.tsx:216 +#: src/view/screens/PreferencesHomeFeed.tsx:222 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." msgstr "フィード内ã®å¼•用をã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚リãƒã‚¹ãƒˆã¯å¼•ãç¶šã表示ã•れã¾ã™ã€‚" -#: src/view/screens/PreferencesHomeFeed.tsx:113 +#: src/view/screens/PreferencesHomeFeed.tsx:119 msgid "Set this setting to \"No\" to hide all replies from your feed." msgstr "フィード内ã®è¿”ä¿¡ã‚’ã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" -#: src/view/screens/PreferencesHomeFeed.tsx:182 +#: src/view/screens/PreferencesHomeFeed.tsx:188 msgid "Set this setting to \"No\" to hide all reposts from your feed." msgstr "フィード内ã®ãƒªãƒã‚¹ãƒˆã‚’ã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" -#: src/view/screens/PreferencesThreads.tsx:116 +#: src/view/screens/PreferencesThreads.tsx:122 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." msgstr "スレッド表示ã§è¿”信を表示ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã¯ã„ã€ã«ã—ã¾ã™ã€‚ã“れã¯å®Ÿé¨“çš„ãªæ©Ÿèƒ½ã§ã™ã€‚" -#: src/view/screens/PreferencesHomeFeed.tsx:252 +#: src/view/screens/PreferencesHomeFeed.tsx:258 msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." -msgstr "ä¿å˜ã•れãŸãƒ•ィードã®ã‚µãƒ³ãƒ—ルを次ã®ãƒ•ィードã«è¡¨ç¤ºã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã¯ã„ã€ã«ã—ã¾ã™ã€‚ã“れã¯å®Ÿé¨“çš„ãªæ©Ÿèƒ½ã§ã™ã€‚" +msgstr "ä¿å˜ã•れãŸãƒ•ィードã‹ã‚‰æŠ•稿を抽出ã—ã¦ã€ŒFollowingã€ãƒ•ィードã«è¡¨ç¤ºã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã¯ã„ã€ã«ã—ã¾ã™ã€‚ã“れã¯å®Ÿé¨“çš„ãªæ©Ÿèƒ½ã§ã™ã€‚" #: src/view/screens/Settings.tsx:277 #: src/view/shell/desktop/LeftNav.tsx:433 @@ -1946,23 +2026,27 @@ msgstr "表示" msgid "Show anyway" msgstr "ã¨ã«ã‹ã表示" -#: src/view/screens/PreferencesHomeFeed.tsx:249 +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 msgid "Show Posts from My Feeds" msgstr "マイフィードã‹ã‚‰ã®æŠ•稿を表示" -#: src/view/screens/PreferencesHomeFeed.tsx:213 +#: src/view/screens/PreferencesHomeFeed.tsx:219 msgid "Show Quote Posts" msgstr "引用を表示" -#: src/view/screens/PreferencesHomeFeed.tsx:110 +#: src/view/screens/PreferencesHomeFeed.tsx:116 msgid "Show Replies" msgstr "返信を表示" -#: src/view/screens/PreferencesThreads.tsx:94 +#: src/view/screens/PreferencesThreads.tsx:100 msgid "Show replies by people you follow before all other replies." msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã‹ã‚‰ã®è¿”ä¿¡ã‚’ã€ä»–ã®ã™ã¹ã¦ã®è¿”ä¿¡ã®å‰ã«è¡¨ç¤ºã—ã¾ã™ã€‚" -#: src/view/screens/PreferencesHomeFeed.tsx:179 +#: src/view/screens/PreferencesHomeFeed.tsx:185 msgid "Show Reposts" msgstr "リãƒã‚¹ãƒˆã‚’表示" @@ -1999,7 +2083,7 @@ msgstr "{0}ã¨ã—ã¦ã‚µã‚¤ãƒ³ã‚¤ãƒ³" msgid "Sign in as..." msgstr "アカウントã®é¸æŠž" -#: src/view/com/auth/login/LoginForm.tsx:130 +#: src/view/com/auth/login/LoginForm.tsx:134 msgid "Sign into" msgstr "サインイン" @@ -2053,11 +2137,11 @@ msgstr "æ£æ–¹å½¢" msgid "Staging" msgstr "ステージング" -#: src/view/screens/Settings.tsx:730 +#: src/view/screens/Settings.tsx:763 msgid "Status page" msgstr "ステータスページ" -#: src/view/screens/Settings.tsx:666 +#: src/view/screens/Settings.tsx:699 msgid "Storybook" msgstr "ストーリーブック" @@ -2086,7 +2170,7 @@ msgstr "サãƒãƒ¼ãƒˆ" msgid "Switch Account" msgstr "アカウントを切り替ãˆã‚‹" -#: src/view/screens/Settings.tsx:646 +#: src/view/screens/Settings.tsx:679 msgid "System log" msgstr "システムãƒã‚°" @@ -2098,7 +2182,7 @@ msgstr "トール" msgid "Terms" msgstr "æ¡ä»¶" -#: src/view/screens/Settings.tsx:744 +#: src/view/screens/Settings.tsx:777 #: src/view/screens/TermsOfService.tsx:29 #: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" @@ -2153,6 +2237,10 @@ msgstr "ã“ã®{screenDescription}ã«ã¯ãƒ•ラグãŒè¨å®šã•れã¦ã„ã¾ã™ï¼š" msgid "This account has requested that users sign in to view their profile." msgstr "ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’閲覧ã™ã‚‹ãŸã‚ã«ã¯ã‚µã‚¤ãƒ³ã‚¤ãƒ³ãŒå¿…è¦ã§ã™ã€‚" +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:107 msgid "This content is not viewable without a Bluesky account." msgstr "ã“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Blueskyã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒãªã„ã¨é–²è¦§ã§ãã¾ã›ã‚“。" @@ -2187,14 +2275,14 @@ msgstr "ã“ã®è¦å‘Šã¯ã€ãƒ¡ãƒ‡ã‚£ã‚¢ãŒæŽ¥ç¶šã•れã¦ã„る投稿ã«ã®ã¿ä½¿ #: src/view/com/util/forms/PostDropdownBtn.tsx:178 msgid "This will hide this post from your feeds." -msgstr "" +msgstr "ã“ã®æŠ•ç¨¿ã‚’ã‚ãªãŸã®ãƒ•ィードã«ãŠã„ã¦éžè¡¨ç¤ºã«ã—ã¾ã™ã€‚" #: src/view/screens/PreferencesThreads.tsx:53 #: src/view/screens/Settings.tsx:503 msgid "Thread Preferences" msgstr "スレッドã®è¨å®š" -#: src/view/screens/PreferencesThreads.tsx:113 +#: src/view/screens/PreferencesThreads.tsx:119 msgid "Threaded Mode" msgstr "スレッドモード" @@ -2226,7 +2314,7 @@ msgstr "リストã§ã®ãƒŸãƒ¥ãƒ¼ãƒˆã‚’解除" #: src/view/com/auth/create/CreateAccount.tsx:65 #: src/view/com/auth/login/Login.tsx:76 -#: src/view/com/auth/login/LoginForm.tsx:117 +#: src/view/com/auth/login/LoginForm.tsx:120 msgid "Unable to contact your service. Please check your Internet connection." msgstr "ã‚ãªãŸã®ã‚µãƒ¼ãƒ“ã‚¹ã«æŽ¥ç¶šã§ãã¾ã›ã‚“。インターãƒãƒƒãƒˆã®æŽ¥ç¶šã‚’確èªã—ã¦ãã ã•ã„。" @@ -2244,7 +2332,7 @@ msgstr "アカウントã®ãƒ–ãƒãƒƒã‚¯ã‚’解除" msgid "Undo repost" msgstr "リãƒã‚¹ãƒˆã‚’å…ƒã«æˆ»ã™" -#: src/view/com/auth/create/state.ts:210 +#: src/view/com/auth/create/state.ts:216 msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "残念ãªãŒã‚‰ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã™ã‚‹ãŸã‚ã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。" @@ -2300,8 +2388,8 @@ msgstr "ユーザーãƒãƒ³ãƒ‰ãƒ«" msgid "User Lists" msgstr "ユーザーリスト" -#: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:188 +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 msgid "Username or email address" msgstr "ユーザーåã¾ãŸã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" @@ -2317,15 +2405,15 @@ msgstr "<0/>ã«ãƒ•ã‚©ãƒãƒ¼ã•れã¦ã„るユーザー" msgid "Users in \"{0}\"" msgstr "{0}ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼" -#: src/view/screens/Settings.tsx:769 +#: src/view/screens/Settings.tsx:802 msgid "Verify email" msgstr "メールアドレスを確èª" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:827 msgid "Verify my email" msgstr "メールアドレスを確èª" -#: src/view/screens/Settings.tsx:803 +#: src/view/screens/Settings.tsx:836 msgid "Verify My Email" msgstr "メールアドレスを確èª" @@ -2387,7 +2475,7 @@ msgstr "返信ã§ãるユーザー" msgid "Wide" msgstr "ワイド" -#: src/view/com/composer/Composer.tsx:413 +#: src/view/com/composer/Composer.tsx:418 msgid "Write post" msgstr "投稿を書ã" @@ -2395,10 +2483,12 @@ msgstr "投稿を書ã" msgid "Write your reply" msgstr "返信を書ã" -#: src/view/screens/PreferencesHomeFeed.tsx:120 -#: src/view/screens/PreferencesHomeFeed.tsx:192 -#: src/view/screens/PreferencesHomeFeed.tsx:227 -#: src/view/screens/PreferencesHomeFeed.tsx:262 +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 msgid "Yes" msgstr "ã¯ã„" diff --git a/src/locale/locales/ko/messages.po b/src/locale/locales/ko/messages.po new file mode 100644 index 000000000..3aaac3d8d --- /dev/null +++ b/src/locale/locales/ko/messages.po @@ -0,0 +1,3530 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-11-05 16:01-0800\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: ko\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: quiple\n" +"Language-Team: quiple\n" +"Plural-Forms: \n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "- 피드 ë -" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr ". ì´ ê²½ê³ ëŠ” 미디어가 ì²¨ë¶€ëœ ê²Œì‹œë¬¼ì—ë§Œ ì‚¬ìš©í• ìˆ˜ 있습니다." + +#: src/view/shell/desktop/RightNav.tsx:168 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "{0, plural, one {초대 코드 #ê°œ 사용 가능} other {초대 코드 #ê°œ 사용 가능}}" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "{0}" + +#: src/view/com/modals/CreateOrEditList.tsx:177 +msgid "{0} {purposeLabel} List" +msgstr "{purposeLabel} 리스트 {0}" + +#: src/lib/strings/time.ts:40 +msgid "{0} at {1}" +msgstr "{0} {1}" + +#: src/lib/strings/time.ts:30 +msgid "{0}d" +msgstr "{0}ì¼" + +#: src/lib/strings/time.ts:28 +msgid "{0}h" +msgstr "{0}시간" + +#: src/lib/strings/time.ts:26 +msgid "{0}m" +msgstr "{0}ë¶„" + +#: src/lib/strings/time.ts:32 +msgid "{0}mo" +msgstr "{0}개월" + +#: src/lib/strings/time.ts:24 +msgid "{diffSeconds}s" +msgstr "{diffSeconds}ì´ˆ" + +#: src/view/shell/desktop/RightNav.tsx:151 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "{invitesAvailable, plural, one {초대 코드: #ê°œ 사용 가능} other {초대 코드: #ê°œ 사용 가능}}" + +#: src/view/screens/Settings.tsx:408 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "초대 코드 {invitesAvailable}ê°œ 사용 가능" + +#: src/view/screens/Settings.tsx:410 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "초대 코드 {invitesAvailable}ê°œ 사용 가능" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/modals/CreateOrEditList.tsx:133 +msgid "{purposeLabel} list created" +msgstr "{purposeLabel} 리스트 ìƒì„±ë¨" + +#: src/view/com/modals/CreateOrEditList.tsx:124 +msgid "{purposeLabel} list updated" +msgstr "{purposeLabel} 리스트 ì—…ë°ì´íЏë¨" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> 멤버" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<1>추천 피드</1><0>ì„ íƒí•˜ê¸°</0>" + +#: src/view/com/modals/DeleteAccount.tsx:82 +msgid "<0>Delete Account </0><1><2>\"</2><3>{0}</3><4>\"</4></1>" +msgstr "<1><2>\"</2><3>{0}</3><4>\"</4></1><0> ê³„ì • ì‚ì œ</0>" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some</0><1>Recommended</1><2>Users</2>" +msgstr "<1>추천 사용ìž</1><0>팔로우하기</0>" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password.</0> Use this to sign into the other app along with your handle." +#~ msgstr "<0>앱 비밀번호입니다.</0> ì´ ë¹„ë°€ë²ˆí˜¸ì™€ í•¸ë“¤ì„ ì‚¬ìš©í•˜ì—¬ 다른 ì•±ì— ë¡œê·¸ì¸í•˜ì„¸ìš”." + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content.</0>" +#~ msgstr "<0>ì°¸ê³ : Bluesky 콘í…ì¸ ë¥¼ 표시하는 타사 ì•±ì€ ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다.</0>" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.</0>" +#~ msgstr "<0>ì°¸ê³ : 프로필과 ê²Œì‹œë¬¼ì€ ê³µê°œ ìƒíƒœë¡œ ìœ ì§€ë©ë‹ˆë‹¤. Bluesky 콘í…ì¸ ë¥¼ 표시하는 타사 ì•±ì€ ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다.</0>" + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:22 +msgid "<0>Welcome to</0><1>Bluesky</1>" +msgstr "<1>Bluesky</1><0>ì— ì˜¤ì‹ ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤</0>" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "A content warning has been applied to this {0}." +msgstr "ì´ {0}ì— ì½˜í…ì¸ ê²½ê³ ê°€ ì ìš©ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "새 ë²„ì „ì˜ ì•±ì„ ì‚¬ìš©í• ìˆ˜ 있습니다. ì•±ì„ ê³„ì† ì‚¬ìš©í•˜ë ¤ë©´ ì—…ë°ì´íŠ¸í•˜ì„¸ìš”." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:418 +msgid "Accessibility" +msgstr "ì ‘ê·¼ì„±" + +#: src/view/com/auth/login/LoginForm.tsx:163 +#: src/view/screens/Settings.tsx:287 +msgid "Account" +msgstr "ê³„ì •" + +#: src/view/com/profile/ProfileHeader.tsx:293 +msgid "Account blocked" +msgstr "ê³„ì • 차단ë¨" + +#: src/view/com/profile/ProfileHeader.tsx:260 +msgid "Account muted" +msgstr "ê³„ì • 뮤트ë¨" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "ê³„ì • 옵션" + +#: src/view/com/util/AccountDropdownBtn.tsx:25 +msgid "Account removed from quick access" +msgstr "퀵 액세스ì—서 ê³„ì • ì œê±°" + +#: src/view/com/profile/ProfileHeader.tsx:315 +msgid "Account unblocked" +msgstr "ê³„ì • 차단 í•´ì œë¨" + +#: src/view/com/profile/ProfileHeader.tsx:273 +msgid "Account unmuted" +msgstr "ê³„ì • 언뮤트ë¨" + +#: src/state/queries/preferences/moderation.ts:138 +msgid "Accounts falsely claiming to be people or orgs" +msgstr "사람 ë˜ëŠ” ì¡°ì§ì„ 사ì¹í•˜ëŠ” ê³„ì •" + +#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:151 +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:772 +msgid "Add" +msgstr "추가" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "콘í…ì¸ ê²½ê³ ì¶”ê°€" + +#: src/view/screens/ProfileList.tsx:762 +msgid "Add a user to this list" +msgstr "ì´ ë¦¬ìŠ¤íŠ¸ì— ì‚¬ìš©ìž ì¶”ê°€" + +#: src/view/screens/Settings.tsx:356 +#: src/view/screens/Settings.tsx:365 +msgid "Add account" +msgstr "ê³„ì • 추가" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 +msgid "Add alt text" +msgstr "대체 í…스트 추가하기" + +#: src/view/screens/AppPasswords.tsx:102 +#: src/view/screens/AppPasswords.tsx:143 +#: src/view/screens/AppPasswords.tsx:156 +msgid "Add App Password" +msgstr "앱 비밀번호 추가" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details" +msgstr "세부 ì •ë³´ 추가" + +#: src/view/com/modals/report/Modal.tsx:197 +msgid "Add details to report" +msgstr "ì‹ ê³ ì„¸ë¶€ ì •ë³´ 추가" + +#: src/view/com/composer/Composer.tsx:449 +msgid "Add link card" +msgstr "ë§í¬ 카드 추가" + +#: src/view/com/composer/Composer.tsx:452 +msgid "Add link card:" +msgstr "ë§í¬ 카드 추가:" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "ë„ë©”ì¸ì— ë‹¤ìŒ DNS ë ˆì½”ë“œë¥¼ 추가하세요:" + +#: src/view/com/profile/ProfileHeader.tsx:357 +msgid "Add to Lists" +msgstr "ë¦¬ìŠ¤íŠ¸ì— ì¶”ê°€" + +#: src/view/screens/ProfileFeed.tsx:281 +msgid "Add to my feeds" +msgstr "ë‚´ í”¼ë“œì— ì¶”ê°€" + +#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:140 +msgid "Added" +msgstr "추가ë¨" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "ë¦¬ìŠ¤íŠ¸ì— ì¶”ê°€ë¨" + +#: src/view/com/feeds/FeedSourceCard.tsx:125 +msgid "Added to my feeds" +msgstr "ë‚´ í”¼ë“œì— ì¶”ê°€ë¨" + +#: src/view/screens/PreferencesHomeFeed.tsx:173 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "ë‹µê¸€ì´ í”¼ë“œì— í‘œì‹œë˜ê¸° 위해 필요한 좋아요 표시 수를 ì¡°ì •í•©ë‹ˆë‹¤." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "ì„±ì¸ ì½˜í…ì¸ " + +#: src/view/com/modals/ContentFilteringSettings.tsx:137 +msgid "Adult content can only be enabled via the Web at <0/>." +msgstr "ì„±ì¸ ì½˜í…ì¸ ëŠ” <0/>ì—서 ì›¹ì„ í†µí•´ì„œë§Œ í™œì„±í™”í• ìˆ˜ 있습니다." + +#: src/view/screens/Settings.tsx:603 +msgid "Advanced" +msgstr "ê³ ê¸‰" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:98 +msgid "Already signed in as @{0}" +msgstr "ì´ë¯¸ @{0}(으)로 로그ì¸í–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "대체 í…스트" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "대체 í…스트는 시ê°ìž¥ì• ì¸ê³¼ ì €ì‹œë ¥ 사용ìžë¥¼ 위해 ì´ë¯¸ì§€ë¥¼ 설명하며 ëª¨ë“ ì‚¬ìš©ìžì˜ ì´í•´ë¥¼ ë•습니다." + +#: src/view/com/modals/VerifyEmail.tsx:120 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "{0}(으)로 ì´ë©”ì¼ì„ ì „ì†¡í–ˆìŠµë‹ˆë‹¤. ì´ ì´ë©”ì¼ì—는 ì•„ëž˜ì— ìž…ë ¥í•˜ëŠ” í™•ì¸ ì½”ë“œê°€ í¬í•¨ë˜ì–´ 있습니다." + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "ì´ì „ ì£¼ì†Œì¸ {0}(으)로 ì´ë©”ì¼ì„ ì „ì†¡í–ˆìŠµë‹ˆë‹¤. ì´ ì´ë©”ì¼ì—는 ì•„ëž˜ì— ìž…ë ¥í•˜ëŠ” í™•ì¸ ì½”ë“œê°€ í¬í•¨ë˜ì–´ 있습니다." + +#: src/view/com/modals/report/ReasonOptions.tsx:23 +msgid "An issue not included in these options" +msgstr "ì´ ì˜µì…˜ì— í¬í•¨ë˜ì§€ ì•Šì€ ë¬¸ì œ" + +#: src/view/com/profile/FollowButton.tsx:30 +#: src/view/com/profile/FollowButton.tsx:40 +#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:183 +#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:193 +msgid "An issue occurred, please try again." +msgstr "ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 다시 시ë„í•´ 주세요." + +#: src/view/com/auth/create/Policies.tsx:80 +#: src/view/com/notifications/FeedItem.tsx:240 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "ë°" + +#: src/view/com/modals/report/ReasonOptions.tsx:14 +msgid "Anti-Social Behavior" +msgstr "반사회ì 행위" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "앱 언어" + +#: src/view/screens/AppPasswords.tsx:228 +msgid "App password deleted" +msgstr "앱 비밀번호 ì‚ì œë¨" + +#: src/view/com/modals/AddAppPasswords.tsx:133 +msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores." +msgstr "앱 비밀번호 ì´ë¦„ì—는 문ìž, 숫ìž, 공백, 대시, 밑줄만 ì‚¬ìš©í• ìˆ˜ 있습니다." + +#: src/view/com/modals/AddAppPasswords.tsx:98 +msgid "App Password names must be at least 4 characters long." +msgstr "앱 비밀번호 ì´ë¦„ì€ 4ìž ì´ìƒì´ì–´ì•¼ 합니다." + +#: src/view/screens/Settings.tsx:623 +msgid "App passwords" +msgstr "앱 비밀번호" + +#: src/view/screens/AppPasswords.tsx:187 +msgid "App Passwords" +msgstr "앱 비밀번호" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:238 +msgid "Appeal content warning" +msgstr "콘í…ì¸ ê²½ê³ ì´ì˜ì‹ ì²" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "콘í…ì¸ ê²½ê³ ì´ì˜ì‹ ì²" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "ì´ì˜ì‹ ì²" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "ì´ ê²°ì •ì— ì´ì˜ì‹ ì²" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "ì´ ê²°ì •ì— ì´ì˜ì‹ ì²í•©ë‹ˆë‹¤." + +#: src/view/screens/Settings.tsx:433 +msgid "Appearance" +msgstr "모양" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "Bluesky ê³µì‹ ì•±ê³¼ bsky.app 웹사ì´íŠ¸ë¥¼ í¬í•¨í•˜ì—¬ ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ëŠ” ì•±ì€ ë¡œê·¸ì•„ì›ƒí•œ 사용ìžì—게 ë‚´ 콘í…ì¸ ë¥¼ 표시하지 않습니다." + +#: src/view/screens/AppPasswords.tsx:224 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "앱 비밀번호 \"{name}\"ì„(를) ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Are you sure you'd like to discard this draft?" +msgstr "ì´ ì´ˆì•ˆì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/screens/ProfileList.tsx:361 +msgid "Are you sure?" +msgstr "ì •ë§ì¸ê°€ìš”?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:221 +msgid "Are you sure? This cannot be undone." +msgstr "ì •ë§ì¸ê°€ìš”? ë˜ëŒë¦´ 수 없습니다." + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "ì„ ì •ì ì´ì§€ 않거나 ì˜ˆìˆ ì ì¸ ë…¸ì¶œ." + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "ë‚´ ê³„ì •ì˜ ê³µê°œ 범위를 ì œí•œí•˜ë„ë¡ ì•±ì— ìš”ì²í•˜ê¸°" + +#: src/view/com/auth/create/CreateAccount.tsx:141 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:254 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:676 +msgid "Back" +msgstr "뒤로" + +#: src/view/screens/Settings.tsx:462 +msgid "Basics" +msgstr "기본" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +msgid "Birthday" +msgstr "ìƒë…„ì›”ì¼" + +#: src/view/screens/Settings.tsx:313 +msgid "Birthday:" +msgstr "ìƒë…„ì›”ì¼:" + +#: src/view/com/profile/ProfileHeader.tsx:286 +#: src/view/com/profile/ProfileHeader.tsx:393 +msgid "Block Account" +msgstr "ê³„ì • 차단" + +#: src/view/screens/ProfileList.tsx:531 +msgid "Block accounts" +msgstr "ê³„ì • 차단" + +#: src/view/screens/ProfileList.tsx:481 +msgid "Block list" +msgstr "리스트 차단" + +#: src/view/screens/ProfileList.tsx:312 +msgid "Block these accounts?" +msgstr "ì´ ê³„ì •ë“¤ì„ ì°¨ë‹¨í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "차단한 ê³„ì •" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "차단한 ê³„ì •" + +#: src/view/com/profile/ProfileHeader.tsx:288 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "차단한 ê³„ì •ì€ ë‚´ ìŠ¤ë ˆë“œì— ë‹µê¸€ì„ ë‹¬ê±°ë‚˜ 나를 멘션하거나 기타 다른 ë°©ì‹ìœ¼ë¡œ 나와 ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없습니다." + +#: src/view/screens/ModerationBlockedAccounts.tsx:115 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "차단한 ê³„ì •ì€ ë‚´ ìŠ¤ë ˆë“œì— ë‹µê¸€ì„ ë‹¬ê±°ë‚˜ 나를 멘션하거나 기타 다른 ë°©ì‹ìœ¼ë¡œ 나와 ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없습니다. 차단한 ê³„ì •ì˜ ì½˜í…ì¸ ë¥¼ ë³¼ 수 없으며 해당 ê³„ì •ë„ ë‚´ 콘í…ì¸ ë¥¼ ë³¼ 수 없게 ë©ë‹ˆë‹¤." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "ì°¨ë‹¨ëœ ê²Œì‹œë¬¼." + +#: src/view/screens/ProfileList.tsx:314 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "차단 목ë¡ì€ 공개ë©ë‹ˆë‹¤. 차단한 ê³„ì •ì€ ë‚´ ìŠ¤ë ˆë“œì— ë‹µê¸€ì„ ë‹¬ê±°ë‚˜ 나를 멘션하거나 기타 다른 ë°©ì‹ìœ¼ë¡œ 나와 ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없습니다." + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:93 +#: src/view/com/auth/SplashScreen.web.tsx:113 +msgid "Blog" +msgstr "블로그" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:31 +msgid "Bluesky" +msgstr "Bluesky" + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:82 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "Bluesky는 ìœ ì—°í•©ë‹ˆë‹¤." + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:71 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky는 ì—´ë ¤ 있습니다." + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:58 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky는 공개ì 입니다." + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "Bluesky는 ë” ê±´ê°•í•œ 커뮤니티를 구축하기 위해 초대 ë°©ì‹ì„ 사용합니다. 초대해 준 ì‚¬ëžŒì´ ì—†ëŠ” 경우 ëŒ€ê¸°ìž ëª…ë‹¨ì— ë“±ë¡í•˜ë©´ ê³§ 초대를 ë³´ë‚´ê² ìŠµë‹ˆë‹¤." + +#: src/view/screens/Moderation.tsx:225 +msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." +msgstr "로그아웃한 사용ìžì—게 ë‚´ 프로필과 ê²Œì‹œë¬¼ì„ í‘œì‹œí•˜ì§€ 않습니다. 다른 앱ì—서는 ì´ ì„¤ì •ì„ ë”°ë¥´ì§€ ì•Šì„ ìˆ˜ 있습니다. ë‚´ ê³„ì •ì„ ë¹„ê³µê°œë¡œ ì „í™˜í•˜ì§€ëŠ” 않습니다." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:752 +msgid "Build version {0} {1}" +msgstr "빌드 ë²„ì „ {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +#: src/view/com/auth/SplashScreen.web.tsx:108 +msgid "Business" +msgstr "비즈니스" + +#: src/view/com/auth/create/Policies.tsx:87 +msgid "By creating an account you agree to the {els}." +msgstr "ê³„ì •ì„ ë§Œë“¤ë©´ {els}ì— ë™ì˜í•˜ëŠ” 것입니다." + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:221 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "ì¹´ë©”ë¼" + +#: src/view/com/modals/AddAppPasswords.tsx:218 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "글ìž, 숫ìž, 공백, 대시, 밑줄만 í¬í•¨í• 수 있습니다. 길ì´ëŠ” 4ìž ì´ìƒì´ì–´ì•¼ í•˜ê³ 32ìžë¥¼ 넘지 않아야 합니다." + +#: src/view/com/composer/Composer.tsx:296 +#: src/view/com/composer/Composer.tsx:299 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/ChangeHandle.tsx:153 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/Confirm.tsx:91 +#: src/view/com/modals/CreateOrEditList.tsx:270 +#: src/view/com/modals/CreateOrEditList.tsx:275 +#: src/view/com/modals/crop-image/CropImage.web.tsx:137 +#: src/view/com/modals/DeleteAccount.tsx:152 +#: src/view/com/modals/DeleteAccount.tsx:225 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:249 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/LinkWarning.tsx:87 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:601 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "취소" + +#: src/view/com/modals/DeleteAccount.tsx:148 +#: src/view/com/modals/DeleteAccount.tsx:221 +msgid "Cancel account deletion" +msgstr "ê³„ì • ì‚ì œ 취소" + +#: src/view/com/modals/AltImage.tsx:123 +#~ msgid "Cancel add image alt text" +#~ msgstr "ì´ë¯¸ì§€ 대체 í…스트 추가 취소" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "핸들 변경 취소" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "ì´ë¯¸ì§€ ìžë¥´ê¸° 취소" + +#: src/view/com/modals/EditProfile.tsx:244 +msgid "Cancel profile editing" +msgstr "프로필 편집 취소" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "게시물 ì¸ìš© 취소" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "검색 취소" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "ëŒ€ê¸°ìž ëª…ë‹¨ ë“±ë¡ ì·¨ì†Œ" + +#: src/view/screens/Settings.tsx:307 +msgid "Change" +msgstr "변경" + +#: src/view/screens/Settings.tsx:635 +#: src/view/screens/Settings.tsx:644 +msgid "Change handle" +msgstr "핸들 변경" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "핸들 변경" + +#: src/view/com/modals/VerifyEmail.tsx:143 +msgid "Change my email" +msgstr "ë‚´ ì´ë©”ì¼ ë³€ê²½" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "ì´ë©”ì¼ ë³€ê²½" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "몇 가지 추천 피드를 확ì¸í•˜ì„¸ìš”. +를 íƒí•˜ì—¬ ê³ ì •ëœ í”¼ë“œ 목ë¡ì— 추가합니다." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "추천 사용ìžë¥¼ 확ì¸í•˜ì„¸ìš”. 해당 사용ìžë¥¼ 팔로우하여 비슷한 사용ìžë¥¼ ë§Œë‚ ìˆ˜ 있습니다." + +#: src/view/com/modals/DeleteAccount.tsx:165 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "ë°›ì€ íŽ¸ì§€í•¨ì—서 ì•„ëž˜ì— ìž…ë ¥í•˜ëŠ” í™•ì¸ ì½”ë“œê°€ í¬í•¨ëœ ì´ë©”ì¼ì´ 있는지 확ì¸í•˜ì„¸ìš”:" + +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "\"모ë‘\" ë˜ëŠ” \"ì—†ìŒ\"ì„ ì„ íƒí•˜ì„¸ìš”." + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "서비스 ì„ íƒ" + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:85 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "맞춤 피드를 통해 ì‚¬ìš©ìž ê²½í—˜ì„ ê°•í™”í•˜ëŠ” ì•Œê³ ë¦¬ì¦˜ì„ ì„ íƒí•©ë‹ˆë‹¤." + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "Choose your" + +#: src/view/com/auth/create/Step2.tsx:127 +msgid "Choose your password" +msgstr "비밀번호를 ìž…ë ¥í•˜ì„¸ìš”" + +#: src/view/screens/Settings.tsx:728 +msgid "Clear all legacy storage data" +msgstr "ëª¨ë“ ë ˆê±°ì‹œ ìŠ¤í† ë¦¬ì§€ ë°ì´í„° 지우기" + +#: src/view/screens/Settings.tsx:730 +msgid "Clear all legacy storage data (restart after this)" +msgstr "ëª¨ë“ ë ˆê±°ì‹œ ìŠ¤í† ë¦¬ì§€ ë°ì´í„° 지우기 (ì´í›„ 다시 시작)" + +#: src/view/screens/Settings.tsx:740 +msgid "Clear all storage data" +msgstr "ëª¨ë“ ìŠ¤í† ë¦¬ì§€ ë°ì´í„° 지우기" + +#: src/view/screens/Settings.tsx:742 +msgid "Clear all storage data (restart after this)" +msgstr "ëª¨ë“ ìŠ¤í† ë¦¬ì§€ ë°ì´í„° 지우기 (ì´í›„ 다시 시작)" + +#: src/view/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 +msgid "Clear search query" +msgstr "검색어 지우기" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "알림 닫기" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "하단 ì„œëž ë‹«ê¸°" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "ì´ë¯¸ì§€ 닫기" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "ì´ë¯¸ì§€ ë·°ì–´ 닫기" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "íƒìƒ‰ 푸터 닫기" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "커뮤니티 ê°€ì´ë“œë¼ì¸" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "답글 작성하기" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/Confirm.tsx:78 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:227 +#: src/view/com/modals/VerifyEmail.tsx:229 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:159 +msgid "Confirm" +msgstr "확ì¸" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "변경 확ì¸" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "콘í…ì¸ ì–¸ì–´ ì„¤ì • 확ì¸" + +#: src/view/com/modals/DeleteAccount.tsx:211 +msgid "Confirm delete account" +msgstr "ê³„ì • ì‚ì œ 확ì¸" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:178 +#: src/view/com/modals/VerifyEmail.tsx:161 +msgid "Confirmation code" +msgstr "í™•ì¸ ì½”ë“œ" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:273 +msgid "Connecting..." +msgstr "ì—°ê²° 중…" + +#: src/view/com/modals/report/ReasonOptions.tsx:38 +msgid "Contains copyrighted material" +msgstr "ì €ìž‘ê¶Œì´ ìžˆëŠ” ìžë£Œê°€ í¬í•¨ë¨" + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "콘í…ì¸ í•„í„°ë§" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "콘í…ì¸ í•„í„°ë§" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "콘í…ì¸ ì–¸ì–´" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "콘í…ì¸ ê²½ê³ " + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "콘í…ì¸ ê²½ê³ " + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "계ì†" + +#: src/view/com/modals/AddAppPasswords.tsx:197 +#: src/view/com/modals/InviteCodes.tsx:182 +msgid "Copied" +msgstr "복사ë¨" + +#: src/view/screens/Settings.tsx:236 +msgid "Copied build version to clipboard" +msgstr "빌드 ë²„ì „ í´ë¦½ë³´ë“œì— 복사ë¨" + +#: src/lib/sharing.ts:23 +#: src/view/com/modals/AddAppPasswords.tsx:75 +#: src/view/com/modals/ChangeHandle.tsx:325 +#: src/view/com/modals/InviteCodes.tsx:152 +#: src/view/com/util/forms/PostDropdownBtn.tsx:100 +msgid "Copied to clipboard" +msgstr "í´ë¦½ë³´ë“œì— 복사ë¨" + +#: src/view/com/modals/AddAppPasswords.tsx:190 +msgid "Copy" +msgstr "복사" + +#: src/view/com/modals/ChangeHandle.tsx:479 +msgid "Copy {0}" +msgstr "{0} 복사" + +#: src/view/screens/ProfileList.tsx:393 +msgid "Copy link to list" +msgstr "리스트 ë§í¬ 복사" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:141 +msgid "Copy link to post" +msgstr "게시물 ë§í¬ 복사" + +#: src/view/com/profile/ProfileHeader.tsx:342 +msgid "Copy link to profile" +msgstr "프로필 ë§í¬ 복사" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:127 +msgid "Copy post text" +msgstr "게시물 í…스트 복사" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "ì €ìž‘ê¶Œ ì •ì±…" + +#: src/view/com/modals/report/ReasonOptions.tsx:37 +msgid "Copyright Violation" +msgstr "ì €ìž‘ê¶Œ 침해" + +#: src/view/screens/ProfileFeed.tsx:95 +msgid "Could not load feed" +msgstr "피드를 불러올 수 없습니다" + +#: src/view/screens/ProfileList.tsx:848 +msgid "Could not load list" +msgstr "리스트를 불러올 수 없습니다" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +#: src/view/com/auth/SplashScreen.web.tsx:78 +msgid "Create a new account" +msgstr "새 ê³„ì • 만들기" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "Create Account" +msgstr "ê³„ì • 만들기" + +#: src/view/com/modals/AddAppPasswords.tsx:228 +msgid "Create App Password" +msgstr "앱 비밀번호 만들기" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "새 ê³„ì • 만들기" + +#: src/view/screens/AppPasswords.tsx:249 +msgid "Created {0}" +msgstr "{0} ìƒì„±ë¨" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "ì‚¬ìš©ìž ì§€ì • ë„ë©”ì¸" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "외부 사ì´íЏ 미디어를 ì‚¬ìš©ìž ì§€ì •í•©ë‹ˆë‹¤." + +#: src/view/screens/Settings.tsx:649 +msgid "Danger Zone" +msgstr "위험 구ì—" + +#: src/view/screens/Settings.tsx:452 +msgid "Dark" +msgstr "ì–´ë‘움" + +#: src/view/com/auth/create/Step1.tsx:61 +msgid "default" +msgstr "기본" + +#: src/view/screens/Settings.tsx:656 +msgid "Delete account" +msgstr "ê³„ì • ì‚ì œ" + +#: src/view/com/modals/DeleteAccount.tsx:83 +#~ msgid "Delete Account" +#~ msgstr "ê³„ì • ì‚ì œ" + +#: src/view/screens/AppPasswords.tsx:222 +#: src/view/screens/AppPasswords.tsx:242 +msgid "Delete app password" +msgstr "앱 비밀번호 ì‚ì œ" + +#: src/view/screens/ProfileList.tsx:360 +#: src/view/screens/ProfileList.tsx:420 +msgid "Delete List" +msgstr "리스트 ì‚ì œ" + +#: src/view/com/modals/DeleteAccount.tsx:214 +msgid "Delete my account" +msgstr "ë‚´ ê³„ì • ì‚ì œ" + +#: src/view/screens/Settings.tsx:666 +msgid "Delete my account…" +msgstr "ë‚´ ê³„ì • ì‚ì œâ€¦" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:216 +msgid "Delete post" +msgstr "게시물 ì‚ì œ" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:220 +msgid "Delete this post?" +msgstr "ì´ ê²Œì‹œë¬¼ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "ì‚ì œëœ ê²Œì‹œë¬¼." + +#: src/view/com/modals/CreateOrEditList.tsx:221 +#: src/view/com/modals/CreateOrEditList.tsx:237 +#: src/view/com/modals/EditProfile.tsx:198 +#: src/view/com/modals/EditProfile.tsx:210 +msgid "Description" +msgstr "설명" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "개발 서버" + +#: src/view/screens/Settings.tsx:671 +msgid "Developer Tools" +msgstr "ê°œë°œìž ë„구" + +#: src/view/com/composer/Composer.tsx:211 +msgid "Did you want to say anything?" +msgstr "í•˜ê³ ì‹¶ì€ ë§ì´ 있나요?" + +#: src/view/com/composer/Composer.tsx:144 +msgid "Discard" +msgstr "ì‚ì œ" + +#: src/view/com/composer/Composer.tsx:138 +msgid "Discard draft" +msgstr "초안 ì‚ì œ" + +#: src/view/screens/Moderation.tsx:207 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "ì•±ì´ ë¡œê·¸ì•„ì›ƒí•œ 사용ìžì—게 ë‚´ ê³„ì •ì„ í‘œì‹œí•˜ì§€ 않ë„ë¡ ì„¤ì •í•˜ê¸°" + +#: src/view/com/posts/FollowingEmptyState.tsx:74 +#: src/view/com/posts/FollowingEndOfFeed.tsx:75 +msgid "Discover new custom feeds" +msgstr "새로운 맞춤 피드 찾아보기" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "새 피드 발견하기" + +#: src/view/com/modals/EditProfile.tsx:192 +msgid "Display name" +msgstr "표시 ì´ë¦„" + +#: src/view/com/modals/EditProfile.tsx:180 +msgid "Display Name" +msgstr "표시 ì´ë¦„" + +#: src/view/com/modals/ChangeHandle.tsx:396 +msgid "DNS Panel" +msgstr "DNS 패ë„" + +#: src/state/queries/preferences/moderation.ts:108 +msgid "Does not include nudity" +msgstr "ì‹ ì²´ 노출 미í¬í•¨" + +#: src/view/com/modals/ChangeHandle.tsx:480 +msgid "Domain Value" +msgstr "ë„ë©”ì¸ ê°’" + +#: src/view/com/modals/ChangeHandle.tsx:487 +msgid "Domain verified!" +msgstr "ë„ë©”ì¸ì„ 확ì¸í–ˆìŠµë‹ˆë‹¤!" + +#: src/view/com/auth/create/Step2.tsx:83 +msgid "Don't have an invite code?" +msgstr "초대 코드가 없으ì‹ë‹ˆê¹Œ?" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AddAppPasswords.tsx:228 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/InviteCodes.tsx:80 +#: src/view/com/modals/InviteCodes.tsx:123 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/ListAddRemoveUsers.tsx:144 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/Threadgate.tsx:129 +#: src/view/com/modals/Threadgate.tsx:132 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/com/modals/UserAddRemoveLists.tsx:82 +#: src/view/screens/PreferencesHomeFeed.tsx:311 +#: src/view/screens/PreferencesThreads.tsx:162 +msgid "Done" +msgstr "완료" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "완료{extraText}" + +#: src/view/com/auth/create/Step3.tsx:33 +#: src/view/com/modals/ChangeHandle.tsx:257 +msgid "e.g. alice" +msgstr "예: alice" + +#: src/view/com/modals/EditProfile.tsx:185 +msgid "e.g. Alice Roberts" +msgstr "예: 앨리스 ë¡œë²„ì¸ " + +#: src/view/com/modals/ChangeHandle.tsx:379 +msgid "e.g. alice.com" +msgstr "예: alice.com" + +#: src/view/com/modals/EditProfile.tsx:203 +msgid "e.g. Artist, dog-lover, and avid reader." +msgstr "예: ì˜ˆìˆ ê°€, ê°œ ì• í˜¸ê°€, ë…서광." + +#: src/view/com/modals/CreateOrEditList.tsx:207 +msgid "e.g. Great Posters" +msgstr "예: ë©‹ì§„ í¬ìŠ¤í„°" + +#: src/view/com/modals/ServerInput.tsx:94 +msgid "e.g. https://bsky.app" +msgstr "예: https://bsky.app" + +#: src/view/com/modals/CreateOrEditList.tsx:208 +msgid "e.g. Spammers" +msgstr "예: 스팸 ê³„ì •" + +#: src/view/com/modals/CreateOrEditList.tsx:228 +msgid "e.g. The posters who never miss." +msgstr "예: ë†“ì¹ ìˆ˜ 없는 í¬ìŠ¤í„°ë“¤." + +#: src/view/com/modals/CreateOrEditList.tsx:229 +msgid "e.g. Users that repeatedly reply with ads." +msgstr "예: 반복ì 으로 ê´‘ê³ ë‹µê¸€ì„ ë‹¤ëŠ” ê³„ì •." + +#: src/view/com/modals/InviteCodes.tsx:96 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "ê° ì½”ë“œëŠ” 한 번만 ì‚¬ìš©í• ìˆ˜ 있습니다. 주기ì 으로 ë” ë§Žì€ ì´ˆëŒ€ 코드를 받게 ë©ë‹ˆë‹¤." + +#: src/view/com/modals/CreateOrEditList.tsx:178 +msgid "Edit" +msgstr "편집" + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "ì´ë¯¸ì§€ 편집" + +#: src/view/screens/ProfileList.tsx:408 +msgid "Edit list details" +msgstr "리스트 세부 ì •ë³´ 편집" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "ë‚´ 피드 편집" + +#: src/view/com/modals/EditProfile.tsx:152 +msgid "Edit my profile" +msgstr "ë‚´ 프로필 편집" + +#: src/view/com/profile/ProfileHeader.tsx:457 +msgid "Edit profile" +msgstr "프로필 편집" + +#: src/view/com/profile/ProfileHeader.tsx:460 +msgid "Edit Profile" +msgstr "프로필 편집" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "ì €ìž¥ëœ í”¼ë“œ 편집" + +#: src/view/com/auth/create/Step2.tsx:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "ì´ë©”ì¼" + +#: src/view/com/auth/create/Step2.tsx:99 +msgid "Email address" +msgstr "ì´ë©”ì¼ ì£¼ì†Œ" + +#: src/view/com/modals/ChangeEmail.tsx:56 +#: src/view/com/modals/ChangeEmail.tsx:88 +msgid "Email updated" +msgstr "ì´ë©”ì¼ ë³€ê²½ë¨" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "ì´ë©”ì¼ ë³€ê²½ë¨" + +#: src/view/com/modals/VerifyEmail.tsx:78 +msgid "Email verified" +msgstr "ì´ë©”ì¼ í™•ì¸ë¨" + +#: src/view/screens/Settings.tsx:291 +msgid "Email:" +msgstr "ì´ë©”ì¼:" + +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "{0}ë§Œ 사용" + +#: src/view/com/modals/ContentFilteringSettings.tsx:158 +msgid "Enable Adult Content" +msgstr "ì„±ì¸ ì½˜í…ì¸ í™œì„±í™”" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "외부 미디어 사용" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:75 +msgid "Enable media players for" +msgstr "미디어 í”Œë ˆì´ì–´ë¥¼ ì‚¬ìš©í• ì™¸ë¶€ 사ì´íЏ" + +#: src/view/screens/PreferencesHomeFeed.tsx:147 +msgid "Enable this setting to only see replies between people you follow." +msgstr "ë‚´ê°€ 팔로우하는 사람들 ê°„ì˜ ë‹µê¸€ë§Œ 표시합니다." + +#: src/view/screens/Profile.tsx:427 +msgid "End of feed" +msgstr "피드 ë" + +#: src/view/com/modals/AddAppPasswords.tsx:165 +msgid "Enter a name for this App Password" +msgstr "ì´ ì•± ë¹„ë°€ë²ˆí˜¸ì˜ ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”" + +#: src/view/com/modals/report/InputIssueDetails.tsx:53 +msgid "Enter a reason or any other details here." +msgstr "ì—¬ê¸°ì— ì´ìœ ë˜ëŠ” 기타 세부 ì •ë³´ë¥¼ ìž…ë ¥í•˜ì„¸ìš”" + +#: src/view/com/modals/VerifyEmail.tsx:102 +msgid "Enter Confirmation Code" +msgstr "í™•ì¸ ì½”ë“œ ìž…ë ¥" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "ì œê³µìž ì£¼ì†Œë¥¼ ìž…ë ¥í•˜ì„¸ìš”:" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "ì‚¬ìš©í• ë„ë©”ì¸ ìž…ë ¥" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "ê³„ì •ì„ ë§Œë“¤ 때 사용한 ì´ë©”ì¼ì„ ìž…ë ¥í•©ë‹ˆë‹¤. 새 비밀번호를 ì„¤ì •í• ìˆ˜ 있ë„ë¡ \"ìž¬ì„¤ì • 코드\"를 보내드립니다." + +#: src/view/com/modals/Waitlist.tsx:78 +msgid "Enter your email" +msgstr "ì´ë©”ì¼ì„ ìž…ë ¥í•˜ì„¸ìš”" + +#: src/view/com/auth/create/Step2.tsx:104 +msgid "Enter your email address" +msgstr "ì´ë©”ì¼ ì£¼ì†Œë¥¼ ìž…ë ¥í•˜ì„¸ìš”" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "ì•„ëž˜ì— ìƒˆ ì´ë©”ì¼ ì£¼ì†Œë¥¼ ìž…ë ¥í•˜ì„¸ìš”." + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "ì‚¬ìš©ìž ì´ë¦„ ë° ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "오류:" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "모ë‘" + +#: src/view/com/modals/report/ReasonOptions.tsx:30 +msgid "Excessive mentions or replies" +msgstr "ê³¼ë„한 멘션 ë˜ëŠ” 답글" + +#: src/state/queries/preferences/moderation.ts:131 +msgid "Excessive unwanted interactions" +msgstr "ì›ì¹˜ 않는 ê³¼ë„한 ìƒí˜¸ìž‘ìš©" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "대체 í…스트 확장" + +#: src/state/queries/preferences/moderation.ts:91 +msgid "Explicit Sexual Images" +msgstr "노골ì ì¸ ì„±ì ì´ë¯¸ì§€" + +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "외부 미디어" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "외부 미디어는 웹사ì´íŠ¸ê°€ 나와 ë‚´ ê¸°ê¸°ì— ëŒ€í•œ ì •ë³´ë¥¼ 수집하ë„ë¡ í• ìˆ˜ 있습니다. \"재ìƒ\" ë²„íŠ¼ì„ ëˆ„ë¥´ê¸° ì „ê¹Œì§€ëŠ” ì–´ë– í•œ ì •ë³´ë„ ì „ì†¡ë˜ê±°ë‚˜ ìš”ì²ë˜ì§€ 않습니다." + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:596 +msgid "External Media Preferences" +msgstr "외부 미디어 ì„¤ì •" + +#: src/view/com/modals/AddAppPasswords.tsx:114 +#: src/view/com/modals/AddAppPasswords.tsx:118 +msgid "Failed to create app password." +msgstr "앱 비밀번호를 만들지 못했습니다." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:78 +msgid "Failed to delete post, please try again" +msgstr "ê²Œì‹œë¬¼ì„ ì‚ì œí•˜ì§€ 못했습니다. 다시 시ë„í•´ 주세요." + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "추천 피드를 불러오지 못했습니다" + +#: src/view/com/lightbox/Lightbox.tsx:83 +msgid "Failed to save image: {0}" +msgstr "ì´ë¯¸ì§€ë¥¼ ì €ìž¥í•˜ì§€ 못했습니다: {0}" + +#: src/view/screens/Feeds.tsx:556 +msgid "Feed offline" +msgstr "피드 오프ë¼ì¸" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "피드 ì„¤ì •" + +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "피드백" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/screens/Profile.tsx:165 +#: src/view/shell/bottom-bar/BottomBar.tsx:181 +#: src/view/shell/desktop/LeftNav.tsx:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "피드" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "피드는 콘í…ì¸ ë¥¼ íë ˆì´ì…˜í•˜ê¸° 위해 사용ìžì— ì˜í•´ 만들어집니다. 관심 있는 피드를 ì„ íƒí•˜ì„¸ìš”." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "피드는 사용ìžê°€ ì•½ê°„ì˜ ì½”ë”© ì „ë¬¸ ì§€ì‹ìœ¼ë¡œ êµ¬ì¶•í• ìˆ˜ 있는 맞춤 ì•Œê³ ë¦¬ì¦˜ìž…ë‹ˆë‹¤. <0/>ì—서 ìžì„¸í•œ ë‚´ìš©ì„ í™•ì¸í•˜ì„¸ìš”." + +#: src/view/com/modals/ChangeHandle.tsx:480 +msgid "File Contents" +msgstr "íŒŒì¼ ë‚´ìš©" + +#: src/view/com/posts/FollowingEmptyState.tsx:57 +#: src/view/com/posts/FollowingEndOfFeed.tsx:58 +msgid "Find accounts to follow" +msgstr "íŒ”ë¡œìš°í• ê³„ì • 찾아보기" + +#: src/view/screens/Search/Search.tsx:427 +msgid "Find users on Bluesky" +msgstr "Blueskyì—서 ì‚¬ìš©ìž ì°¾ê¸°" + +#: src/view/screens/Search/Search.tsx:425 +msgid "Find users with the search tool on the right" +msgstr "ì˜¤ë¥¸ìª½ì˜ ê²€ìƒ‰ ë„구로 ì‚¬ìš©ìž ì°¾ê¸°" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:152 +msgid "Finding similar accounts..." +msgstr "ìœ ì‚¬í•œ ê³„ì •ì„ ì°¾ëŠ” 중…" + +#: src/view/screens/PreferencesHomeFeed.tsx:111 +msgid "Fine-tune the content you see on your home screen." +msgstr "홈 í™”ë©´ì— í‘œì‹œë˜ëŠ” 콘í…ì¸ ë¥¼ 미세 ì¡°ì •í•©ë‹ˆë‹¤." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "í† ë¡ ìŠ¤ë ˆë“œë¥¼ 미세 ì¡°ì •í•©ë‹ˆë‹¤." + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:138 +#: src/view/com/profile/FollowButton.tsx:64 +#: src/view/com/profile/ProfileHeader.tsx:542 +#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:241 +msgid "Follow" +msgstr "팔로우" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "팔로우:" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "ì¼ë¶€ 사용ìžë¥¼ 팔로우하여 시작하세요. 관심 있는 사용ìžë¥¼ 기반으로 ë” ë§Žì€ ì‚¬ìš©ìžë¥¼ 추천해 드릴 수 있습니다." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "팔로우한 사용ìž" + +#: src/view/screens/PreferencesHomeFeed.tsx:154 +msgid "Followed users only" +msgstr "팔로우한 사용ìžë§Œ" + +#: src/view/com/notifications/FeedItem.tsx:166 +msgid "followed you" +msgstr "ë‹˜ì´ ë‚˜ë¥¼ 팔로우했습니다" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "팔로워" + +#: src/view/com/profile/ProfileHeader.tsx:628 +msgid "following" +msgstr "팔로우 중" + +#: src/view/com/profile/ProfileHeader.tsx:526 +#: src/view/screens/ProfileFollows.tsx:25 +#: src/view/shell/desktop/Feeds.tsx:27 +msgid "Following" +msgstr "팔로우 중" + +#: src/view/com/profile/ProfileHeader.tsx:196 +msgid "Following {0}" +msgstr "{0} 팔로우 중" + +#: src/view/com/profile/ProfileHeader.tsx:575 +msgid "Follows you" +msgstr "나를 팔로우함" + +#: src/view/com/modals/DeleteAccount.tsx:109 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "보안ìƒì˜ ì´ìœ 로 ì´ë©”ì¼ ì£¼ì†Œë¡œ í™•ì¸ ì½”ë“œë¥¼ 보내야 합니다." + +#: src/view/com/modals/AddAppPasswords.tsx:211 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "보안ìƒì˜ ì´ìœ 로 ì´ ë¹„ë°€ë²ˆí˜¸ëŠ” 다시 ë³¼ 수 없습니다. ì´ ë¹„ë°€ë²ˆí˜¸ë¥¼ 분실한 경우 새 비밀번호를 ìƒì„±í•´ì•¼ 합니다." + +#: src/view/com/auth/login/LoginForm.tsx:236 +msgid "Forgot" +msgstr "분실" + +#: src/view/com/auth/login/LoginForm.tsx:233 +msgid "Forgot password" +msgstr "비밀번호 분실" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "비밀번호 분실" + +#: src/view/com/modals/report/ReasonOptions.tsx:56 +msgid "Frequently Posts Unwanted Content" +msgstr "ì›ì¹˜ 않는 콘í…ì¸ ë¥¼ ì§€ì†ì 으로 게시함" + +#: src/view/com/posts/FeedItem.tsx:187 +msgid "From <0/>" +msgstr "<0/>ì—서" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "갤러리" + +#: src/view/com/modals/VerifyEmail.tsx:185 +msgid "Get Started" +msgstr "시작하기" + +#: src/view/com/modals/report/ReasonOptions.tsx:19 +msgid "Glaring violations of law or terms of service" +msgstr "명백한 ë²•ë¥ ë˜ëŠ” 서비스 ì´ìš©ì•½ê´€ 위반 행위" + +#: src/view/com/auth/LoggedOut.tsx:81 +#: src/view/com/auth/LoggedOut.tsx:82 +#: src/view/com/util/moderation/ScreenHider.tsx:123 +#: src/view/shell/desktop/LeftNav.tsx:104 +msgid "Go back" +msgstr "뒤로" + +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:857 +#: src/view/screens/ProfileList.tsx:862 +msgid "Go Back" +msgstr "뒤로" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:283 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "다ìŒ" + +#: src/state/queries/preferences/moderation.ts:116 +msgid "Gore, self-harm, torture" +msgstr "ê³ ì–´, ìží•´, ê³ ë¬¸" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "핸들" + +#: src/view/com/modals/report/ReasonOptions.tsx:15 +msgid "Harassment, trolling, or intolerance" +msgstr "ê´´ë¡íž˜, 허위 ì •ë³´ 게시, 편협성" + +#: src/state/queries/preferences/moderation.ts:123 +msgid "Hate Group Iconography" +msgstr "ì¦ì˜¤ 단체 ë„ìƒí•™" + +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "ë„움ë§" + +#: src/view/com/modals/AddAppPasswords.tsx:152 +msgid "Here is your app password." +msgstr "앱 비밀번호입니다." + +#: src/view/com/modals/ContentFilteringSettings.tsx:211 +#: src/view/com/modals/ContentFilteringSettings.tsx:238 +#: src/view/com/notifications/FeedItem.tsx:327 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "숨기기" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:175 +msgid "Hide post" +msgstr "게시물 숨기기" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:179 +msgid "Hide this post?" +msgstr "ì´ ê²Œì‹œë¬¼ì„ ìˆ¨ê¸°ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/notifications/FeedItem.tsx:319 +msgid "Hide user list" +msgstr "ì‚¬ìš©ìž ë¦¬ìŠ¤íŠ¸ 숨기기" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "피드 ì„œë²„ì— ì—°ê²°í•˜ëŠ” 중 ì–´ë–¤ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 피드 ì†Œìœ ìžì—게 ì´ ë¬¸ì œì— ëŒ€í•´ ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "피드 ì„œë²„ì— ì—°ê²°í•˜ëŠ” 중 ì–´ë–¤ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 피드 ì†Œìœ ìžì—게 ì´ ë¬¸ì œì— ëŒ€í•´ ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "피드 서버가 잘못 êµ¬ì„±ëœ ê²ƒ 같습니다. 피드 ì†Œìœ ìžì—게 ì´ ë¬¸ì œì— ëŒ€í•´ ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "피드 서버가 오프ë¼ì¸ ìƒíƒœì¸ 것 같습니다. 피드 ì†Œìœ ìžì—게 ì´ ë¬¸ì œì— ëŒ€í•´ ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "피드 서버ì—서 ìž˜ëª»ëœ ì‘ë‹µì„ ë³´ëƒˆìŠµë‹ˆë‹¤. 피드 ì†Œìœ ìžì—게 ì´ ë¬¸ì œì— ëŒ€í•´ ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "ì´ í”¼ë“œë¥¼ 찾는 ë° ë¬¸ì œê°€ 있습니다. 피드가 ì‚ì œë˜ì—ˆì„ 수 있습니다." + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "ì´ í”¼ë“œë¥¼ 찾는 ë° ë¬¸ì œê°€ 있습니다. 피드가 ì‚ì œë˜ì—ˆì„ 수 있습니다." + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "홈" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx:104 +#: src/view/screens/Settings.tsx:482 +msgid "Home Feed Preferences" +msgstr "홈 피드 ì„¤ì •" + +#: src/view/com/modals/ChangeHandle.tsx:419 +msgid "Host" +msgstr "호스트" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "호스팅 ì œê³µìž" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "호스팅 ì œê³µìž ì£¼ì†Œ" + +#: src/view/com/modals/VerifyEmail.tsx:210 +msgid "I have a code" +msgstr "코드가 있습니다" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "ë‚´ ë„ë©”ì¸ì„ ê°€ì§€ê³ ìžˆìŠµë‹ˆë‹¤" + +#: src/state/queries/preferences/moderation.ts:92 +msgid "i.e. pornography" +msgstr "예: í¬ë¥´ë…¸ê·¸ëž˜í”¼" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "ì•„ë¬´ê²ƒë„ ì„ íƒí•˜ì§€ 않으면 ëª¨ë“ ì—°ë ¹ëŒ€ì— ì 합하다는 뜻입니다." + +#: src/view/com/auth/create/Policies.tsx:91 +msgid "If you are not yet an adult according to the laws of your country, your parent or legal guardian must read these Terms on your behalf." +msgstr "본ì¸ì´ 거주하는 êµê°€ì˜ ë²•ë¥ ì— ë”°ë¼ ì•„ì§ ì„±ì¸ì´ 아닌 경우, 부모 ë˜ëŠ” 법ì 보호ìžê°€ 본ì¸ì„ ëŒ€ì‹ í•˜ì—¬ 본 ì•½ê´€ì„ ì½ì–´ì•¼ 합니다." + +#: src/view/com/modals/report/ReasonOptions.tsx:18 +msgid "Illegal and Urgent" +msgstr "불법 ë° ê¸´ê¸‰ 사í•" + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "ì´ë¯¸ì§€ 대체 í…스트" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "ì´ë¯¸ì§€ 옵션" + +#: src/state/queries/preferences/moderation.ts:124 +msgid "Images of terror groups, articles covering events, etc." +msgstr "테러 ë‹¨ì²´ì˜ ì´ë¯¸ì§€, 사건 ê´€ë ¨ 기사 등" + +#: src/state/queries/preferences/moderation.ts:137 +msgid "Impersonation" +msgstr "사ì¹" + +#: src/view/com/modals/report/ReasonOptions.tsx:53 +msgid "Impersonation or false claims about identity or affiliation" +msgstr "ì‹ ì› ë˜ëŠ” 소ì†ì— 대한 ì‚¬ì¹ ë˜ëŠ” 허위 주장" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "ë‚´ 네트워í¬" + +#: src/state/queries/preferences/moderation.ts:100 +msgid "Including non-sexual and artistic" +msgstr "ì„ ì •ì ì´ì§€ 않거나 ì˜ˆìˆ ì 콘í…ì¸ í¬í•¨" + +#: src/view/com/auth/login/LoginForm.tsx:115 +msgid "Invalid username or password" +msgstr "ìž˜ëª»ëœ ì‚¬ìš©ìž ì´ë¦„ ë˜ëŠ” 비밀번호" + +#: src/view/screens/Settings.tsx:384 +msgid "Invite" +msgstr "초대" + +#: src/view/com/modals/InviteCodes.tsx:93 +#: src/view/screens/Settings.tsx:372 +msgid "Invite a Friend" +msgstr "친구 초대하기" + +#: src/view/com/auth/create/Step2.tsx:63 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Invite code" +msgstr "초대 코드" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "초대 코드가 올바르지 않습니다. 코드를 올바르게 ìž…ë ¥í–ˆëŠ”ì§€ 확ì¸í•œ 후 다시 시ë„하세요." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "초대 코드: {invitesAvailable}ê°œ 사용 가능" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +#: src/view/com/auth/SplashScreen.web.tsx:118 +msgid "Jobs" +msgstr "채용" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "ëŒ€ê¸°ìž ëª…ë‹¨ 등ë¡" + +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 +msgid "Join the waitlist." +msgstr "ëŒ€ê¸°ìž ëª…ë‹¨ì— ë“±ë¡í•˜ì„¸ìš”." + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "ëŒ€ê¸°ìž ëª…ë‹¨ 등ë¡" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "언어 ì„ íƒ" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "언어 ì„¤ì •" + +#: src/view/screens/Settings.tsx:542 +msgid "Languages" +msgstr "언어" + +#: src/view/com/auth/create/StepHeader.tsx:14 +msgid "Last step!" +msgstr "마지막 단계예요!" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "ë” ì•Œì•„ë³´ê¸°" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:104 +msgid "Learn More" +msgstr "ë” ì•Œì•„ë³´ê¸°" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:101 +msgid "Learn more about this warning" +msgstr "ì´ ê²½ê³ ì— ëŒ€í•´ ë” ì•Œì•„ë³´ê¸°" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "Blueskyì—서 공개ë˜ëŠ” í•ëª©ì— ëŒ€í•´ ìžì„¸ížˆ 알아보세요." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "ëª¨ë“ ì–¸ì–´ë¥¼ ë³´ë ¤ë©´ ëª¨ë‘ ì„ íƒí•˜ì§€ ì•Šì€ ìƒíƒœë¡œ ë‘세요." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Bluesky ë– ë‚˜ê¸°" + +#: src/view/screens/Settings.tsx:273 +msgid "Legacy storage cleared, you need to restart the app now." +msgstr "ë ˆê±°ì‹œ ìŠ¤í† ë¦¬ì§€ê°€ 지워졌으며 지금 ì•±ì„ ë‹¤ì‹œ 시작해야 합니다." + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "비밀번호를 ìž¬ì„¤ì •í•´ 봅시다!" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬" + +#: src/view/screens/Settings.tsx:446 +msgid "Light" +msgstr "ë°ìŒ" + +#: src/view/screens/ProfileFeed.tsx:599 +msgid "Like this feed" +msgstr "ì´ í”¼ë“œ" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "좋아요 표시한 ê³„ì •" + +#: src/view/com/notifications/FeedItem.tsx:171 +msgid "liked your custom feed{0}" +msgstr "ë‹˜ì´ ë‚´ 맞춤 피드{0}ì„(를) 좋아합니다" + +#: src/view/com/notifications/FeedItem.tsx:155 +msgid "liked your post" +msgstr "ë‹˜ì´ ë‚´ ê²Œì‹œë¬¼ì„ ì¢‹ì•„í•©ë‹ˆë‹¤" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "좋아요" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "ë‚´ ê³„ì • 공개 범위 ì œí•œ" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account to logged-out users" +#~ msgstr "ë‚´ ê³„ì •ì˜ ê³µê°œ 범위를 로그아웃한 사용ìžë¡œ ì œí•œ" + +#: src/view/com/modals/CreateOrEditList.tsx:187 +msgid "List Avatar" +msgstr "리스트 아바타" + +#: src/view/screens/ProfileList.tsx:320 +msgid "List blocked" +msgstr "리스트 차단ë¨" + +#: src/view/screens/ProfileList.tsx:364 +msgid "List deleted" +msgstr "리스트 ì‚ì œë¨" + +#: src/view/screens/ProfileList.tsx:279 +msgid "List muted" +msgstr "리스트 뮤트ë¨" + +#: src/view/com/modals/CreateOrEditList.tsx:200 +msgid "List Name" +msgstr "리스트 ì´ë¦„" + +#: src/view/screens/ProfileList.tsx:339 +msgid "List unblocked" +msgstr "리스트 차단 í•´ì œë¨" + +#: src/view/screens/ProfileList.tsx:298 +msgid "List unmuted" +msgstr "리스트 언뮤트ë¨" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:379 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "리스트" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "ë” ë§Žì€ ê²Œì‹œë¬¼ 불러오기" + +#: src/view/screens/Notifications.tsx:148 +msgid "Load new notifications" +msgstr "새 알림 불러오기" + +#: src/view/com/feeds/FeedPage.tsx:189 +#: src/view/screens/ProfileList.tsx:655 +msgid "Load new posts" +msgstr "새 게시물 불러오기" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "불러오는 중…" + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "로컬 개발 서버" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "Logged-out users" +#~ msgstr "로그아웃한 사용ìž" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "로그아웃 표시" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "목ë¡ì— 없는 ê³„ì •ìœ¼ë¡œ 로그ì¸" + +#: src/view/screens/ProfileFeed.tsx:472 +#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +#~ msgstr "ì´ í”¼ë“œëŠ” Bluesky ê³„ì •ì´ ìžˆëŠ” 사용ìžë§Œ ì´ìš©í• 수 있는 것 같습니다. ì´ í”¼ë“œë¥¼ ë³´ë ¤ë©´ 가입하거나 로그ì¸í•˜ì„¸ìš”!" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "ì´ê³³ì´ ë‹¹ì‹ ì´ ê°€ê³ ìž í•˜ëŠ” ê³³ì¸ì§€ 확ì¸í•˜ì„¸ìš”!" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "미디어" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "멘션한 사용ìž" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "멘션한 사용ìž" + +#: src/view/screens/Search/Search.tsx:537 +msgid "Menu" +msgstr "메뉴" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "서버ì—서 보낸 메시지" + +#: src/view/com/modals/report/ReasonOptions.tsx:52 +msgid "Misleading Account" +msgstr "ì˜¤í•´ì˜ ì†Œì§€ê°€ 있는 ê³„ì •" + +#: src/view/com/modals/CreateOrEditList.tsx:68 +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:564 +#: src/view/shell/desktop/LeftNav.tsx:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "ê²€í† " + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "ê²€í† ë¦¬ìŠ¤íŠ¸" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "ê²€í† ë¦¬ìŠ¤íŠ¸" + +#: src/view/shell/desktop/Feeds.tsx:57 +msgid "More feeds" +msgstr "피드 ë” ë³´ê¸°" + +#: src/view/com/profile/ProfileHeader.tsx:552 +#: src/view/screens/ProfileFeed.tsx:371 +#: src/view/screens/ProfileList.tsx:592 +msgid "More options" +msgstr "옵션 ë” ë³´ê¸°" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "게시물 옵션 ë” ë³´ê¸°" + +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "좋아요 ë§Žì€ ìˆœ" + +#: src/view/com/profile/ProfileHeader.tsx:374 +msgid "Mute Account" +msgstr "ê³„ì • 뮤트" + +#: src/view/screens/ProfileList.tsx:519 +msgid "Mute accounts" +msgstr "ê³„ì • 뮤트" + +#: src/view/screens/ProfileList.tsx:466 +msgid "Mute list" +msgstr "리스트 뮤트" + +#: src/view/screens/ProfileList.tsx:271 +msgid "Mute these accounts?" +msgstr "ì´ ê³„ì •ë“¤ì„ ë®¤íŠ¸í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:159 +msgid "Mute thread" +msgstr "ìŠ¤ë ˆë“œ 뮤트" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "뮤트한 ê³„ì •" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "뮤트한 ê³„ì •" + +#: src/view/screens/ModerationMutedAccounts.tsx:115 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "ê³„ì •ì„ ë®¤íŠ¸í•˜ë©´ 피드와 알림ì—서 해당 ê³„ì •ì˜ ê²Œì‹œë¬¼ì´ ì‚¬ë¼ì§‘니다. 뮤트 목ë¡ì€ ì™„ì „ížˆ 비공개로 ìœ ì§€ë©ë‹ˆë‹¤." + +#: src/view/screens/ProfileList.tsx:273 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "뮤트 목ë¡ì€ 비공개입니다. 뮤트한 ê³„ì •ì€ ë‚˜ì™€ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 있지만 해당 ê³„ì •ì˜ ê²Œì‹œë¬¼ì„ ë³´ê±°ë‚˜ 해당 ê³„ì •ìœ¼ë¡œë¶€í„° ì•Œë¦¼ì„ ë°›ì„ ìˆ˜ 없습니다." + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "ë‚´ ê³„ì •" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "ë‚´ ìƒë…„ì›”ì¼" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "ë‚´ 피드" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "ë‚´ 프로필" + +#: src/view/screens/Settings.tsx:521 +msgid "My Saved Feeds" +msgstr "ë‚´ ì €ìž¥ëœ í”¼ë“œ" + +#: src/view/com/modals/AddAppPasswords.tsx:181 +#: src/view/com/modals/CreateOrEditList.tsx:214 +msgid "Name" +msgstr "ì´ë¦„" + +#: src/view/com/modals/report/ReasonOptions.tsx:45 +#: src/view/com/modals/report/ReasonOptions.tsx:60 +msgid "Name or Description Violates Community Standards" +msgstr "ì´ë¦„ ë˜ëŠ” ì„¤ëª…ì´ ì»¤ë®¤ë‹ˆí‹° ê¸°ì¤€ì„ ìœ„ë°˜í•©ë‹ˆë‹¤" + +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "{0}ì—서 ìž„ë² ë“œë¥¼ 불러오지 않습니다" + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:74 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "팔로워와 ë°ì´í„°ì— 대한 ì ‘ê·¼ ê¶Œí•œì„ ìžƒì§€ 않습니다." + +#: src/view/com/modals/ChangeHandle.tsx:518 +msgid "Nevermind, create a handle for me" +msgstr "ì·¨ì†Œí•˜ê³ ë‚˜ë§Œì˜ í•¸ë“¤ 만들기" + +#: src/view/com/modals/CreateOrEditList.tsx:178 +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "새로 만들기" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:441 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "새 게시물" + +#: src/view/shell/desktop/LeftNav.tsx:258 +msgid "New Post" +msgstr "새 게시물" + +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "새로운 순" + +#: src/view/com/auth/create/CreateAccount.tsx:154 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:286 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:105 +msgid "Next" +msgstr "다ìŒ" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "ë‹¤ìŒ ì´ë¯¸ì§€" + +#: src/view/screens/PreferencesHomeFeed.tsx:129 +#: src/view/screens/PreferencesHomeFeed.tsx:200 +#: src/view/screens/PreferencesHomeFeed.tsx:235 +#: src/view/screens/PreferencesHomeFeed.tsx:272 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "No" +msgstr "아니요" + +#: src/view/screens/ProfileFeed.tsx:592 +#: src/view/screens/ProfileList.tsx:729 +msgid "No description" +msgstr "설명 ì—†ìŒ" + +#: src/view/com/modals/ChangeHandle.tsx:404 +msgid "No DNS Panel" +msgstr "DNS íŒ¨ë„ ì—†ìŒ" + +#: src/view/com/profile/ProfileHeader.tsx:217 +msgid "No longer following {0}" +msgstr "ë” ì´ìƒ {0}(ì„)를 팔로우하지 않ìŒ" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "ê²°ê³¼ ì—†ìŒ" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "\"{query}\"ì— ëŒ€í•œ 결과를 ì°¾ì„ ìˆ˜ 없습니다." + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "{0}ì— ëŒ€í•œ 결과를 ì°¾ì„ ìˆ˜ 없습니다." + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "{query}ì— ëŒ€í•œ 결과를 ì°¾ì„ ìˆ˜ 없습니다." + +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "괜찮습니다" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "ì—†ìŒ" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "해당 ì—†ìŒ" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "해당 ì—†ìŒ." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgstr "ì°¸ê³ : Bluesky는 개방형 공개 네트워í¬ì´ë¯€ë¡œ ì´ ì„¤ì •ì„ ì‚¬ìš© ì„¤ì •í•´ë„ ë‚´ í”„ë¡œí•„ì´ ë¹„ê³µê°œë¡œ ì „í™˜ë˜ê±°ë‚˜ 로그ì¸í•œ 사용ìžê°€ ë‚´ ê²Œì‹œë¬¼ì„ ë³¼ 수 있는 ê¸°ëŠ¥ì´ ì œí•œë˜ì§€ 않습니다. ì´ ì„¤ì •ì€ Bluesky 앱과 웹사ì´íŠ¸ì˜ ê²Œì‹œë¬¼ 공개 여부만 ì œí•œí•˜ë©°, Bluesky 콘í…ì¸ ë¥¼ 표시하는 타사 ì•±ì€ ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ì§€ ì•Šì„ ìˆ˜ 있으며, 로그아웃한 사용ìžì—게 ë‚´ 콘í…ì¸ ê°€ 표시ë 수 있습니다." + +#: src/view/screens/Moderation.tsx:232 +msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." +msgstr "ì°¸ê³ : Bluesky는 개방형 공개 네트워í¬ìž…니다. ì´ ì„¤ì •ì€ Bluesky 앱과 웹사ì´íЏì—서만 ë‚´ 콘í…ì¸ ê°€ 표시ë˜ëŠ” ê²ƒì„ ì œí•œí•˜ë©°, 다른 앱ì—서는 ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. 다른 앱과 웹사ì´íЏì—서는 로그아웃한 사용ìžì—게 ë‚´ 콘í…ì¸ ê°€ ê³„ì† í‘œì‹œë 수 있습니다." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "ì°¸ê³ : Bluesky 콘í…ì¸ ë¥¼ 표시하는 타사 ì•±ì€ ì´ ì„¤ì •ì„ ì¤€ìˆ˜í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다." + +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "알림" + +#: src/lib/strings/time.ts:22 +msgid "now" +msgstr "지금" + +#: src/view/com/modals/report/ReasonOptions.tsx:34 +msgid "Nudity or pornography not labeled as such" +msgstr "노출 ë˜ëŠ” ìŒëž€ë¬¼ë¡œ ì„¤ì •ë˜ì§€ ì•Šì€ ì½˜í…ì¸ " + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "안 ë¼!" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "확ì¸" + +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "ì˜¤ëž˜ëœ ìˆœ" + +#: src/view/screens/Settings.tsx:229 +msgid "Onboarding reset" +msgstr "온보딩 ìž¬ì„¤ì •" + +#: src/view/com/composer/Composer.tsx:365 +msgid "One or more images is missing alt text." +msgstr "하나 ì´ìƒì˜ ì´ë¯¸ì§€ì— 대체 í…스트가 누ë½ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "{0}ë§Œ ë‹µê¸€ì„ ë‹¬ 수 있습니다." + +#: src/view/com/composer/Composer.tsx:470 +#: src/view/com/composer/Composer.tsx:471 +msgid "Open emoji picker" +msgstr "ì´ëª¨í‹°ì½˜ ì„ íƒê¸° 열기" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "내비게ì´ì…˜ 열기" + +#: src/view/screens/Settings.tsx:534 +msgid "Opens configurable language settings" +msgstr "구성 가능한 언어 ì„¤ì •ì„ ì—½ë‹ˆë‹¤" + +#: src/view/screens/Settings.tsx:588 +msgid "Opens external embeds settings" +msgstr "외부 ìž„ë² ë“œ ì„¤ì •ì„ ì—½ë‹ˆë‹¤" + +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "초대 코드 목ë¡ì„ 엽니다" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "ì‚¬ìš©ìž ì§€ì • ë„ë©”ì¸ì„ 사용하기 위한 대화 ìƒìžë¥¼ 엽니다" + +#: src/view/screens/Settings.tsx:559 +msgid "Opens moderation settings" +msgstr "ê²€í† ì„¤ì •ì„ ì—½ë‹ˆë‹¤" + +#: src/view/screens/Settings.tsx:515 +msgid "Opens screen with all saved feeds" +msgstr "ëª¨ë“ ì €ìž¥ëœ í”¼ë“œ í™”ë©´ì„ ì—½ë‹ˆë‹¤" + +#: src/view/screens/Settings.tsx:615 +msgid "Opens the app password settings page" +msgstr "비밀번호 ì„¤ì • 페ì´ì§€ë¥¼ 엽니다" + +#: src/view/screens/Settings.tsx:474 +msgid "Opens the home feed preferences" +msgstr "홈 피드 ì„¤ì •ì„ ì—½ë‹ˆë‹¤" + +#: src/view/screens/Settings.tsx:698 +msgid "Opens the storybook page" +msgstr "ìŠ¤í† ë¦¬ë¶ íŽ˜ì´ì§€ë¥¼ 엽니다" + +#: src/view/screens/Settings.tsx:678 +msgid "Opens the system log page" +msgstr "시스템 로그 페ì´ì§€ë¥¼ 엽니다" + +#: src/view/screens/Settings.tsx:495 +msgid "Opens the threads preferences" +msgstr "ìŠ¤ë ˆë“œ ì„¤ì •ì„ ì—½ë‹ˆë‹¤" + +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "ë˜ëŠ” ë‹¤ìŒ ì˜µì…˜ì„ ê²°í•©í•˜ì„¸ìš”:" + +#: src/view/com/auth/create/Step1.tsx:67 +#: src/view/com/modals/report/ReasonOptions.tsx:22 +msgid "Other" +msgstr "기타" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "다른 ê³„ì •" + +#: src/state/queries/preferences/moderation.ts:99 +msgid "Other Nudity" +msgstr "기타 ì‹ ì²´ 노출" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "다른 서비스" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "기타…" + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "페ì´ì§€ë¥¼ ì°¾ì„ ìˆ˜ ì—†ìŒ" + +#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:221 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:193 +msgid "Password" +msgstr "비밀번호" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "비밀번호 변경ë¨" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "비밀번호 변경ë¨" + +#: src/view/com/lightbox/Lightbox.tsx:66 +msgid "Permission to access camera roll is required." +msgstr "ì•¨ë²”ì— ì ‘ê·¼í• ìˆ˜ 있는 ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤." + +#: src/view/com/lightbox/Lightbox.tsx:72 +msgid "Permission to access camera roll was denied. Please enable it in your system settings." +msgstr "ì•¨ë²”ì— ì ‘ê·¼í• ìˆ˜ 있는 ê¶Œí•œì´ ê±°ë¶€ë˜ì—ˆìŠµë‹ˆë‹¤. 시스템 ì„¤ì •ì—서 활성화하세요." + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "성ì¸ìš© 사진." + +#: src/view/screens/ProfileFeed.tsx:362 +#: src/view/screens/ProfileList.tsx:556 +msgid "Pin to home" +msgstr "í™ˆì— ê³ ì •" + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "ê³ ì •ëœ í”¼ë“œ" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "{0} 재ìƒ" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "ë™ì˜ìƒ 재ìƒ" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "GIF를 재ìƒí•©ë‹ˆë‹¤" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "í•¸ë“¤ì„ ìž…ë ¥í•˜ì„¸ìš”." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "비밀번호를 ìž…ë ¥í•˜ì„¸ìš”." + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "ì´ë©”ì¼ì„ 변경하기 ì „ì— ì´ë©”ì¼ì„ 확ì¸í•´ 주세요. ì´ëŠ” ì´ë©”ì¼ ë³€ê²½ ë„구가 추가ë˜ëŠ” ë™ì•ˆ ì¼ì‹œì 으로 요구ë˜ëŠ” 사í•ì´ë©° ê³§ ì œê±°ë ì˜ˆì •ìž…ë‹ˆë‹¤." + +#: src/view/com/modals/AddAppPasswords.tsx:89 +msgid "Please enter a name for your app password. All spaces is not allowed." +msgstr "앱 ë¹„ë°€ë²ˆí˜¸ì˜ ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”. ëª¨ë“ ê³µë°± 문ìžëŠ” 허용ë˜ì§€ 않습니다." + +#: src/view/com/modals/AddAppPasswords.tsx:144 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "ì´ ì•± ë¹„ë°€ë²ˆí˜¸ì— ëŒ€í•´ ê³ ìœ í•œ ì´ë¦„ì„ ìž…ë ¥í•˜ê±°ë‚˜ 무작위로 ìƒì„±ëœ ì´ë¦„ì„ ì‚¬ìš©í•©ë‹ˆë‹¤." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "ì´ë©”ì¼ì„ ìž…ë ¥í•˜ì„¸ìš”." + +#: src/view/com/modals/DeleteAccount.tsx:182 +msgid "Please enter your password as well:" +msgstr "ë¹„ë°€ë²ˆí˜¸ë„ ìž…ë ¥í•´ 주세요:" + +#: src/lib/hooks/useAccountSwitcher.ts:42 +msgid "Please sign in as @{0}" +msgstr "@{0}(으)로 로그ì¸í•˜ì„¸ìš”." + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this content warning was incorrectly applied!" +msgstr "ì´ ì½˜í…ì¸ ê²½ê³ ê°€ 잘못 ì ìš©ë˜ì—ˆë‹¤ê³ ìƒê°í•˜ëŠ” ì´ìœ 를 ì•Œë ¤ì£¼ì„¸ìš”!" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "ì´ ê²°ì •ì´ ìž˜ëª»ë˜ì—ˆë‹¤ê³ ìƒê°í•˜ëŠ” ì´ìœ 를 ì•Œë ¤ì£¼ì„¸ìš”." + +#: src/view/com/modals/VerifyEmail.tsx:100 +msgid "Please Verify Your Email" +msgstr "ì´ë©”ì¼ ì¸ì¦í•˜ê¸°" + +#: src/view/com/composer/Composer.tsx:215 +msgid "Please wait for your link card to finish loading" +msgstr "ë§í¬ 카드를 ì™„ì „ížˆ 불러올 때까지 ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”." + +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "게시물" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:348 +msgid "Post (verb)" +msgstr "게시하기" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:74 +msgid "Post deleted" +msgstr "게시물 ì‚ì œë¨" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "게시물 숨김" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "게시물 언어" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "게시물 언어" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "ê²Œì‹œë¬¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ" + +#: src/lib/api/index.ts:242 +msgid "Posting..." +msgstr "게시하는 중…" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "게시물" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "ì˜¤í•´ì˜ ì†Œì§€ê°€ 있는 ë§í¬" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "ì´ì „ ì´ë¯¸ì§€" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "주 언어" + +#: src/view/screens/PreferencesThreads.tsx:97 +msgid "Prioritize Your Follows" +msgstr "ë‚´ 팔로우 ìš°ì„ ì‹œí‚¤ê¸°" + +#: src/view/screens/Settings.tsx:571 +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Privacy" +msgstr "ê°œì¸ì •ë³´" + +#: src/view/com/auth/create/Policies.tsx:69 +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:784 +#: src/view/shell/Drawer.tsx:262 +msgid "Privacy Policy" +msgstr "ê°œì¸ì •ë³´ 처리방침" + +#: src/lib/api/index.ts:80 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "처리 중…" + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "프로필" + +#: src/view/com/modals/EditProfile.tsx:128 +msgid "Profile updated" +msgstr "프로필 ì—…ë°ì´íЏë¨" + +#: src/view/screens/Settings.tsx:842 +msgid "Protect your account by verifying your email." +msgstr "ì´ë©”ì¼ì„ ì¸ì¦í•˜ì—¬ ê³„ì •ì„ ë³´í˜¸í•˜ì„¸ìš”." + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "ìŒì†Œê±°í•˜ê±°ë‚˜ ì¼ê´„ ì°¨ë‹¨í• ìˆ˜ 있는 공개ì ì´ê³ ê³µìœ í• ìˆ˜ 있는 ì‚¬ìš©ìž ëª©ë¡ìž…니다." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "피드를 íƒìƒ‰í• 수 있는 공개ì ì´ê³ ê³µìœ í• ìˆ˜ 있는 목ë¡ìž…니다." + +#: src/view/com/composer/Composer.tsx:329 +msgid "Publish post" +msgstr "게시물 게시하기" + +#: src/view/com/composer/Composer.tsx:329 +msgid "Publish reply" +msgstr "답글 게시하기" + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "게시물 ì¸ìš©" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "게시물 ì¸ìš©" + +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "무작위" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "비율" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "추천" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "추천 피드" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "추천 사용ìž" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:282 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "ì œê±°" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "{0}ì„(를) ë‚´ 피드ì—서 ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "ê³„ì • ì œê±°" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "피드 ì œê±°" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:281 +msgid "Remove from my feeds" +msgstr "ë‚´ 피드ì—서 ì œê±°" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "ì´ë¯¸ì§€ ì œê±°" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "ì´ë¯¸ì§€ 미리보기 ì œê±°" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "ì´ í”¼ë“œë¥¼ ë‚´ 피드ì—서 ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "ì´ í”¼ë“œë¥¼ ì €ìž¥ëœ í”¼ë“œì—서 ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "리스트ì—서 ì œê±°ë¨" + +#: src/view/com/feeds/FeedSourceCard.tsx:111 +#: src/view/com/feeds/FeedSourceCard.tsx:178 +msgid "Removed from my feeds" +msgstr "ë‚´ 피드ì—서 ì œê±°ë¨" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "답글" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "ì´ ìŠ¤ë ˆë“œì— ëŒ€í•œ ë‹µê¸€ì´ ë¹„í™œì„±í™”ë©ë‹ˆë‹¤." + +#: src/view/com/composer/Composer.tsx:341 +msgid "Reply" +msgstr "답글" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 +msgid "Reply Filters" +msgstr "답글 í•„í„°" + +#: src/view/com/post/Post.tsx:164 +#: src/view/com/posts/FeedItem.tsx:285 +msgid "Reply to <0/>" +msgstr "<0/> 님ì—게 보내는 답글" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "Report {collectionName}" +msgstr "{collectionName} ì‹ ê³ " + +#: src/view/com/profile/ProfileHeader.tsx:408 +msgid "Report Account" +msgstr "ê³„ì • ì‹ ê³ " + +#: src/view/screens/ProfileFeed.tsx:301 +msgid "Report feed" +msgstr "피드 ì‹ ê³ " + +#: src/view/screens/ProfileList.tsx:434 +msgid "Report List" +msgstr "리스트 ì‹ ê³ " + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:198 +msgid "Report post" +msgstr "게시물 ì‹ ê³ " + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "재게시" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "재게시 ë˜ëŠ” 게시물 ì¸ìš©" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "재게시한 ê³„ì •" + +#: src/view/com/posts/FeedItem.tsx:205 +msgid "Reposted by {0}" +msgstr "{0} ë‹˜ì´ ìž¬ê²Œì‹œí•¨" + +#: src/view/com/posts/FeedItem.tsx:222 +msgid "Reposted by <0/>" +msgstr "<0/> ë‹˜ì´ ìž¬ê²Œì‹œí•¨" + +#: src/view/com/notifications/FeedItem.tsx:162 +msgid "reposted your post" +msgstr "ë‹˜ì´ ë‚´ ê²Œì‹œë¬¼ì„ ìž¬ê²Œì‹œí–ˆìŠµë‹ˆë‹¤" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "변경 ìš”ì²" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "ë‚´ ê³„ì •ì˜ ê³µê°œ 범위 ì œí•œ ìš”ì²í•˜ê¸°" + +#: src/view/screens/Settings.tsx:423 +msgid "Require alt text before posting" +msgstr "게시하기 ì „ 대체 í…스트 필수" + +#: src/view/com/auth/create/Step2.tsx:68 +msgid "Required for this provider" +msgstr "ì´ ì œê³µìžì—서 필수" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "코드 ìž¬ì„¤ì •" + +#: src/view/screens/Settings.tsx:720 +msgid "Reset onboarding state" +msgstr "온보딩 ìƒíƒœ ìž¬ì„¤ì •" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "비밀번호 ìž¬ì„¤ì •" + +#: src/view/screens/Settings.tsx:710 +msgid "Reset preferences state" +msgstr "ì„¤ì • ìƒíƒœ ìž¬ì„¤ì •" + +#: src/view/screens/Settings.tsx:718 +msgid "Resets the onboarding state" +msgstr "온보딩 ìƒíƒœ ìž¬ì„¤ì •" + +#: src/view/screens/Settings.tsx:708 +msgid "Resets the preferences state" +msgstr "ì„¤ì • ìƒíƒœ ìž¬ì„¤ì •" + +#: src/view/com/auth/create/CreateAccount.tsx:163 +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "다시 시ë„" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "핸들 변경 다시 시ë„" + +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:252 +#: src/view/com/modals/CreateOrEditList.tsx:260 +#: src/view/com/modals/EditProfile.tsx:224 +#: src/view/screens/ProfileFeed.tsx:354 +msgid "Save" +msgstr "ì €ìž¥" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "대체 í…스트 ì €ìž¥" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "변경 ì‚¬í• ì €ìž¥" + +#: src/view/com/modals/EditProfile.tsx:232 +msgid "Save Changes" +msgstr "변경 ì‚¬í• ì €ìž¥" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "핸들 변경 ì €ìž¥" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "ì´ë¯¸ì§€ ìžë¥´ê¸° ì €ìž¥" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "ì €ìž¥ëœ í”¼ë“œ" + +#: src/view/com/lightbox/Lightbox.tsx:81 +msgid "Saved to your camera roll." +msgstr "ë‚´ ì•¨ë²”ì— ì €ìž¥ë¨" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:53 +#: src/view/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:559 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "검색" + +#: src/view/screens/Search/Search.tsx:390 +#~ msgid "Search for posts and users." +#~ msgstr "게시물 ë° ì‚¬ìš©ìžë¥¼ 검색합니다." + +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +#: src/view/com/modals/ListAddRemoveUsers.tsx:70 +msgid "Search for users" +msgstr "ì‚¬ìš©ìž ê²€ìƒ‰í•˜ê¸°" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "보안 단계 í•„ìš”" + +#: src/view/screens/SavedFeeds.tsx:163 +msgid "See this guide" +msgstr "ì´ ê°€ì´ë“œ" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "See what's next" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Bluesky Social ì„ íƒ" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "기존 ê³„ì •ì—서 ì„ íƒ" + +#: src/view/com/auth/login/LoginForm.tsx:147 +msgid "Select service" +msgstr "서비스 ì„ íƒ" + +#: src/view/screens/LanguageSettings.tsx:281 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "구ë…하는 í”¼ë“œì— í¬í•¨í• 언어를 ì„ íƒí•©ë‹ˆë‹¤. ì„ íƒí•˜ì§€ 않으면 ëª¨ë“ ì–¸ì–´ê°€ 표시ë©ë‹ˆë‹¤." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "ì•±ì— í‘œì‹œë˜ëŠ” 기본 í…스트 언어를 ì„ íƒí•©ë‹ˆë‹¤." + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "피드ì—서 번ì—ì„ ìœ„í•´ ì„ í˜¸í•˜ëŠ” 언어를 ì„ íƒí•©ë‹ˆë‹¤." + +#: src/view/com/modals/VerifyEmail.tsx:198 +msgid "Send Confirmation Email" +msgstr "í™•ì¸ ì´ë©”ì¼ ì „ì†¡" + +#: src/view/com/modals/DeleteAccount.tsx:129 +msgid "Send email" +msgstr "ì´ë©”ì¼ ì „ì†¡" + +#: src/view/com/modals/DeleteAccount.tsx:140 +msgid "Send Email" +msgstr "ì´ë©”ì¼ ì „ì†¡" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "피드백 ì „ì†¡" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "ì‹ ê³ ì „ì†¡" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "새 비밀번호 ì„¤ì •" + +#: src/view/screens/PreferencesHomeFeed.tsx:225 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "피드ì—서 ëª¨ë“ ì¸ìš© ê²Œì‹œë¬¼ì„ ìˆ¨ê¸°ë ¤ë©´ ì´ ì„¤ì •ì„ \"아니요\"로 ì„¤ì •í•©ë‹ˆë‹¤. 재게시는 ê³„ì† í‘œì‹œë©ë‹ˆë‹¤." + +#: src/view/screens/PreferencesHomeFeed.tsx:122 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "피드ì—서 ëª¨ë“ ë‹µê¸€ì„ ìˆ¨ê¸°ë ¤ë©´ ì´ ì„¤ì •ì„ \"아니요\"로 ì„¤ì •í•©ë‹ˆë‹¤." + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "피드ì—서 ëª¨ë“ ìž¬ê²Œì‹œë¥¼ ìˆ¨ê¸°ë ¤ë©´ ì´ ì„¤ì •ì„ \"아니요\"로 ì„¤ì •í•©ë‹ˆë‹¤." + +#: src/view/screens/PreferencesThreads.tsx:122 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "ìŠ¤ë ˆë“œ ë³´ê¸°ì— ë‹µê¸€ì„ í‘œì‹œí•˜ë ¤ë©´ ì´ ì„¤ì •ì„ \"예\"로 ì„¤ì •í•©ë‹ˆë‹¤. ì´ëŠ” 실험ì ì¸ ê¸°ëŠ¥ìž…ë‹ˆë‹¤." + +#: src/view/screens/PreferencesHomeFeed.tsx:261 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "팔로우한 í”¼ë“œì— ì €ìž¥ëœ í”¼ë“œ ìƒ˜í”Œì„ í‘œì‹œí•˜ë ¤ë©´ ì´ ì„¤ì •ì„ \"예\"로 ì„¤ì •í•©ë‹ˆë‹¤. ì´ëŠ” 실험ì ì¸ ê¸°ëŠ¥ìž…ë‹ˆë‹¤." + +#: src/view/screens/Settings.tsx:278 +#: src/view/shell/desktop/LeftNav.tsx:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "ì„¤ì •" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "성행위 ë˜ëŠ” ì„ ì •ì ì¸ ë…¸ì¶œ." + +#: src/state/queries/preferences/moderation.ts:107 +msgid "Sexually Suggestive" +msgstr "성ì 암시" + +#: src/view/com/profile/ProfileHeader.tsx:342 +#: src/view/com/util/forms/PostDropdownBtn.tsx:141 +#: src/view/screens/ProfileList.tsx:393 +msgid "Share" +msgstr "ê³µìœ " + +#: src/view/screens/ProfileFeed.tsx:313 +msgid "Share feed" +msgstr "피드 ê³µìœ " + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "ë§í¬ ê³µìœ " + +#: src/view/com/modals/ContentFilteringSettings.tsx:253 +#: src/view/com/util/moderation/ContentHider.tsx:105 +#: src/view/screens/Settings.tsx:317 +msgid "Show" +msgstr "표시" + +#: src/view/screens/PreferencesHomeFeed.tsx:68 +msgid "Show all replies" +msgstr "ëª¨ë“ ë‹µê¸€ 표시" + +#: src/view/com/util/moderation/ScreenHider.tsx:132 +msgid "Show anyway" +msgstr "ë¬´ì‹œí•˜ê³ í‘œì‹œ" + +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "{0} ìž„ë² ë“œ 표시" + +#: src/view/com/post/Post.tsx:195 +#: src/view/com/posts/FeedItem.tsx:360 +msgid "Show More" +msgstr "ë” ë³´ê¸°" + +#: src/view/screens/PreferencesHomeFeed.tsx:258 +msgid "Show Posts from My Feeds" +msgstr "ë‚´ 피드ì—서 게시물 표시" + +#: src/view/screens/PreferencesHomeFeed.tsx:222 +msgid "Show Quote Posts" +msgstr "ì¸ìš© 게시물 표시" + +#: src/view/screens/PreferencesHomeFeed.tsx:119 +msgid "Show Replies" +msgstr "답글 표시" + +#: src/view/screens/PreferencesThreads.tsx:100 +msgid "Show replies by people you follow before all other replies." +msgstr "ë‚´ê°€ 팔로우하는 ì‚¬ëžŒë“¤ì˜ ë‹µê¸€ì„ ë‹¤ë¥¸ ëª¨ë“ ë‹µê¸€ë³´ë‹¤ ë¨¼ì € 표시합니다." + +#: src/view/screens/PreferencesHomeFeed.tsx:70 +msgid "Show replies with at least {value} {0}" +msgstr "좋아요가 {value}ê°œ ì´ìƒì¸ 답글 표시" + +#: src/view/screens/PreferencesHomeFeed.tsx:188 +msgid "Show Reposts" +msgstr "재게시 표시" + +#: src/view/com/notifications/FeedItem.tsx:348 +msgid "Show users" +msgstr "ì‚¬ìš©ìž í‘œì‹œ" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:70 +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:54 +#: src/view/shell/bottom-bar/BottomBar.tsx:285 +#: src/view/shell/bottom-bar/BottomBar.tsx:286 +#: src/view/shell/bottom-bar/BottomBar.tsx:288 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:177 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:180 +#: src/view/shell/NavSignupCard.tsx:58 +#: src/view/shell/NavSignupCard.tsx:59 +#: src/view/shell/NavSignupCard.tsx:61 +msgid "Sign in" +msgstr "로그ì¸" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:78 +#: src/view/com/auth/SplashScreen.tsx:57 +#: src/view/com/auth/SplashScreen.web.tsx:88 +msgid "Sign In" +msgstr "로그ì¸" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "{0}(으)로 로그ì¸" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "로그ì¸" + +#: src/view/com/auth/login/LoginForm.tsx:134 +msgid "Sign into" +msgstr "로그ì¸" + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +#: src/view/screens/Settings.tsx:102 +#: src/view/screens/Settings.tsx:105 +msgid "Sign out" +msgstr "로그아웃" + +#: src/view/shell/bottom-bar/BottomBar.tsx:275 +#: src/view/shell/bottom-bar/BottomBar.tsx:276 +#: src/view/shell/bottom-bar/BottomBar.tsx:278 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:167 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:170 +#: src/view/shell/NavSignupCard.tsx:49 +#: src/view/shell/NavSignupCard.tsx:50 +#: src/view/shell/NavSignupCard.tsx:52 +msgid "Sign up" +msgstr "가입하기" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "가입 ë˜ëŠ” 로그ì¸í•˜ì—¬ ëŒ€í™”ì— ì°¸ì—¬í•˜ì„¸ìš”." + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "ë¡œê·¸ì¸ í•„ìš”" + +#: src/view/screens/Settings.tsx:328 +msgid "Signed in as" +msgstr "로그ì¸í•œ ê³„ì •" + +#: src/lib/hooks/useAccountSwitcher.ts:36 +#: src/view/com/auth/login/ChooseAccountForm.tsx:103 +msgid "Signed in as @{0}" +msgstr "@{0}(으)로 로그ì¸í–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "건너뛰기" + +#: src/lib/hooks/useAccountSwitcher.ts:47 +msgid "Sorry! We need you to enter your password." +msgstr "죄송합니다. 비밀번호를 ìž…ë ¥í•´ 주세요." + +#: src/App.native.tsx:57 +#~ msgid "Sorry! Your session expired. Please log in again." +#~ msgstr "죄송합니다. ì„¸ì…˜ì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤. 다시 로그ì¸í•´ 주세요." + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "답글 ì •ë ¬" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "ë™ì¼í•œ ê²Œì‹œë¬¼ì— ëŒ€í•œ ë‹µê¸€ì„ ì •ë ¬í•˜ëŠ” 기준입니다." + +#: src/state/queries/preferences/moderation.ts:130 +#: src/view/com/modals/report/ReasonOptions.tsx:29 +msgid "Spam" +msgstr "스팸" + +#: src/view/com/modals/report/ReasonOptions.tsx:57 +msgid "Spam; excessive mentions or replies" +msgstr "스팸, ê³¼ë„한 멘션 ë˜ëŠ” 답글" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "ì •ì‚¬ê°í˜•" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "스테ì´ì§•" + +#: src/view/screens/Settings.tsx:764 +msgid "Status page" +msgstr "ìƒíƒœ 페ì´ì§€" + +#: src/view/com/auth/create/CreateAccount.tsx:120 +msgid "Step {0}" +msgstr "{0}단계" + +#: src/view/com/auth/create/StepHeader.tsx:16 +msgid "Step {step} of 3" +msgstr "3단계 중 {step}단계" + +#: src/view/screens/Settings.tsx:269 +msgid "Storage cleared, you need to restart the app now." +msgstr "ìŠ¤í† ë¦¬ì§€ê°€ 지워졌으며 지금 ì•±ì„ ë‹¤ì‹œ 시작해야 합니다." + +#: src/view/screens/Settings.tsx:700 +msgid "Storybook" +msgstr "ìŠ¤í† ë¦¬ë¶" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "확ì¸" + +#: src/view/screens/ProfileList.tsx:583 +msgid "Subscribe" +msgstr "구ë…" + +#: src/view/screens/ProfileList.tsx:579 +msgid "Subscribe to this list" +msgstr "ì´ ë¦¬ìŠ¤íŠ¸ë¡œ 구ë…" + +#: src/view/screens/Search/Search.tsx:362 +msgid "Suggested Follows" +msgstr "팔로우 추천" + +#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65 +msgid "Suggested for you" +msgstr "나를 위한 추천" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "ì§€ì›" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "ê³„ì • ì „í™˜" + +#: src/view/screens/Settings.tsx:439 +msgid "System" +msgstr "시스템" + +#: src/view/screens/Settings.tsx:680 +msgid "System log" +msgstr "시스템 로그" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "세로" + +#: src/view/shell/desktop/RightNav.tsx:93 +msgid "Terms" +msgstr "ì´ìš©ì•½ê´€" + +#: src/view/com/auth/create/Policies.tsx:59 +#: src/view/screens/Settings.tsx:778 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "서비스 ì´ìš©ì•½ê´€" + +#: src/view/com/modals/report/ReasonOptions.tsx:46 +#: src/view/com/modals/report/ReasonOptions.tsx:61 +msgid "Terms used violate community standards" +msgstr "커뮤니티 í‘œì¤€ì„ ìœ„ë°˜í•˜ëŠ” 용어 사용" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 +msgid "Text input field" +msgstr "í…스트 ìž…ë ¥ 필드" + +#: src/view/com/modals/report/Modal.tsx:82 +msgid "Thank you for your report! We'll look into it promptly." +msgstr "ì‹ ê³ í•´ 주셔서 ê°ì‚¬í•©ë‹ˆë‹¤! 즉시 ê²€í† í•˜ê² ìŠµë‹ˆë‹¤." + +#: src/view/com/modals/ChangeHandle.tsx:464 +msgid "That contains the following:" +msgstr "í…스트 íŒŒì¼ ë‚´ìš©:" + +#: src/view/com/profile/ProfileHeader.tsx:310 +msgid "The account will be able to interact with you after unblocking." +msgstr "ì°¨ë‹¨ì„ í•´ì œí•˜ë©´ 해당 ê³„ì •ì´ ë‚˜ì™€ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 있게 ë©ë‹ˆë‹¤." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "커뮤니티 ê°€ì´ë“œë¼ì¸ì´ <0/>(으)로 ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "ì €ìž‘ê¶Œ ì •ì±…ì´ <0/>(으)로 ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/com/post-thread/PostThread.tsx:433 +msgid "The post may have been deleted." +msgstr "ê²Œì‹œë¬¼ì´ ì‚ì œë˜ì—ˆì„ 수 있습니다." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "ê°œì¸ì •ë³´ ì²˜ë¦¬ë°©ì¹¨ì´ <0/>(으)로 ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "ì§€ì› ì–‘ì‹ì´ ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤. ë„ì›€ì´ í•„ìš”í•˜ë‹¤ë©´ {HELP_DESK_URL}ì„ ë°©ë¬¸í•˜ê±°ë‚˜ <0/>로 문ì˜í•´ 주세요." + +#: src/view/screens/Debug.tsx:184 +msgid "The task has been completed" +msgstr "ìž‘ì—…ì„ ì™„ë£Œí–ˆìŠµë‹ˆë‹¤." + +#: src/view/screens/Debug.tsx:188 +msgid "The task has been completed successfully and with no problems" +msgstr "ìž‘ì—…ì„ ë¬¸ì œ ì—†ì´ ì„±ê³µì 으로 완료했습니다." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "서비스 ì´ìš©ì•½ê´€ì´ 다ìŒìœ¼ë¡œ ì´ë™ë˜ì—ˆìŠµë‹ˆë‹¤:" + +#: src/view/screens/ProfileFeed.tsx:557 +msgid "There was an an issue contacting the server, please check your internet connection and try again." +msgstr "ì„œë²„ì— ì—°ê²°í•˜ëŠ” ë™ì•ˆ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•œ 후 다시 시ë„하세요." + +#: src/view/screens/ProfileFeed.tsx:218 +msgid "There was an an issue updating your feeds, please check your internet connection and try again." +msgstr "피드를 ì—…ë°ì´íŠ¸í•˜ëŠ” ë™ì•ˆ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•œ 후 다시 시ë„하세요." + +#: src/view/screens/ProfileFeed.tsx:245 +#: src/view/screens/ProfileList.tsx:263 +#: src/view/screens/SavedFeeds.tsx:209 +#: src/view/screens/SavedFeeds.tsx:231 +#: src/view/screens/SavedFeeds.tsx:252 +msgid "There was an issue contacting the server" +msgstr "ì„œë²„ì— ì—°ê²°í•˜ëŠ” ë™ì•ˆ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:58 +#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:67 +#: src/view/com/feeds/FeedSourceCard.tsx:113 +#: src/view/com/feeds/FeedSourceCard.tsx:127 +#: src/view/com/feeds/FeedSourceCard.tsx:181 +msgid "There was an issue contacting your server" +msgstr "ì„œë²„ì— ì—°ê²°í•˜ëŠ” ë™ì•ˆ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/modals/ContentFilteringSettings.tsx:126 +msgid "There was an issue syncing your preferences with the server" +msgstr "ì„¤ì •ì„ ì„œë²„ì™€ ë™ê¸°í™”하는 ë™ì•ˆ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/profile/ProfileHeader.tsx:204 +#: src/view/com/profile/ProfileHeader.tsx:225 +#: src/view/com/profile/ProfileHeader.tsx:264 +#: src/view/com/profile/ProfileHeader.tsx:277 +#: src/view/com/profile/ProfileHeader.tsx:297 +#: src/view/com/profile/ProfileHeader.tsx:319 +msgid "There was an issue! {0}" +msgstr "ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤! {0}" + +#: src/view/screens/ProfileList.tsx:284 +#: src/view/screens/ProfileList.tsx:303 +#: src/view/screens/ProfileList.tsx:325 +#: src/view/screens/ProfileList.tsx:344 +msgid "There was an issue. Please check your internet connection and try again." +msgstr "ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•œ 후 다시 시ë„하세요." + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "ì• í”Œë¦¬ì¼€ì´ì…˜ì— 예기치 ì•Šì€ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì´ëŸ° ì¼ì´ ë°œìƒí•˜ë©´ ì €í¬ì—게 ì•Œë ¤ì£¼ì„¸ìš”!" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +#~ msgid "This {0} has been labeled." +#~ msgstr "ì´ {0}ì— ë ˆì´ë¸”ì´ ì§€ì •ë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "This {screenDescription} has been flagged:" +msgstr "ì´ {screenDescription}ì— í”Œëž˜ê·¸ê°€ ì§€ì •ë˜ì—ˆìŠµë‹ˆë‹¤:" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +msgid "This account has requested that users sign in to view their profile." +msgstr "ì´ ê³„ì •ì˜ í”„ë¡œí•„ì„ ë³´ë ¤ë©´ 로그ì¸í•´ì•¼ 합니다." + +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "ì´ ì½˜í…ì¸ ëŠ” {0}ì—서 호스팅ë©ë‹ˆë‹¤. 외부 미디어를 ì‚¬ìš©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "ì´ ì½˜í…ì¸ ëŠ” Bluesky ê³„ì •ì´ ì—†ìœ¼ë©´ ë³¼ 수 없습니다." + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "ì´ í”¼ë“œëŠ” 현재 íŠ¸ëž˜í”½ì´ ë§Žì•„ ì¼ì‹œì 으로 ì‚¬ìš©í• ìˆ˜ 없습니다. ë‚˜ì¤‘ì— ë‹¤ì‹œ 시ë„í•´ 주세요." + +#: src/view/screens/Profile.tsx:392 +#: src/view/screens/ProfileFeed.tsx:484 +#: src/view/screens/ProfileList.tsx:636 +msgid "This feed is empty!" +msgstr "ì´ í”¼ë“œëŠ” 비어 있습니다." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "ì´ ì •ë³´ëŠ” 다른 사용ìžì™€ ê³µìœ ë˜ì§€ 않습니다." + +#: src/view/com/modals/VerifyEmail.tsx:115 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "ì´ëŠ” ì´ë©”ì¼ì„ 변경하거나 비밀번호를 ìž¬ì„¤ì •í•´ì•¼ í• ë•Œ 중요한 ì •ë³´ìž…ë‹ˆë‹¤." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "온ë¼ì¸ ìƒíƒœë¥¼ ìœ ì§€í• ìˆ˜ 있게 하는 서비스입니다." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "ì´ ë§í¬ë¥¼ í´ë¦í•˜ë©´ ë‹¤ìŒ ì›¹ì‚¬ì´íŠ¸ë¡œ ì´ë™í•©ë‹ˆë‹¤:" + +#: src/view/screens/ProfileList.tsx:794 +msgid "This list is empty!" +msgstr "ì´ ë¦¬ìŠ¤íŠ¸ëŠ” 비어 있습니다." + +#: src/view/com/modals/AddAppPasswords.tsx:105 +msgid "This name is already in use" +msgstr "ì´ ì´ë¦„ì€ ì´ë¯¸ 사용 중입니다." + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "ì´ ê²Œì‹œë¬¼ì€ ì‚ì œë˜ì—ˆìŠµë‹ˆë‹¤." + +#: src/view/com/auth/create/Policies.tsx:46 +msgid "This service has not provided terms of service or a privacy policy." +msgstr "ì´ ì„œë¹„ìŠ¤ì—는 서비스 ì´ìš©ì•½ê´€ì´ë‚˜ ê°œì¸ì •ë³´ ì²˜ë¦¬ë°©ì¹¨ì´ ì œê³µë˜ì§€ 않습니다." + +#: src/view/com/modals/ChangeHandle.tsx:444 +msgid "This should create a domain record at:" +msgstr "ì´ ë„ë©”ì¸ì— ë ˆì½”ë“œê°€ 추가ë©ë‹ˆë‹¤:" + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "ì´ ê²½ê³ ëŠ” 미디어가 ì²¨ë¶€ëœ ê²Œì‹œë¬¼ì—ë§Œ ì‚¬ìš©í• ìˆ˜ 있습니다." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:180 +msgid "This will hide this post from your feeds." +msgstr "피드ì—서 ì´ ê²Œì‹œë¬¼ì„ ìˆ¨ê¹ë‹ˆë‹¤." + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:504 +msgid "Thread Preferences" +msgstr "ìŠ¤ë ˆë“œ ì„¤ì •" + +#: src/view/screens/PreferencesThreads.tsx:119 +msgid "Threaded Mode" +msgstr "ìŠ¤ë ˆë“œ 모드" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "드ë¡ë‹¤ìš´ 열기 ë° ë‹«ê¸°" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "변형" + +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:113 +msgid "Translate" +msgstr "번ì—" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "다시 시ë„" + +#: src/view/com/modals/ChangeHandle.tsx:427 +msgid "Type" +msgstr "ìœ í˜•" + +#: src/view/screens/ProfileList.tsx:481 +msgid "Un-block list" +msgstr "리스트 차단 í•´ì œ" + +#: src/view/screens/ProfileList.tsx:466 +msgid "Un-mute list" +msgstr "리스트 언뮤트" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:120 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "ì„œë¹„ìŠ¤ì— ì—°ê²°í• ìˆ˜ 없습니다. ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•˜ì„¸ìš”." + +#: src/view/com/profile/ProfileHeader.tsx:470 +#: src/view/com/profile/ProfileHeader.tsx:473 +#: src/view/screens/ProfileList.tsx:565 +msgid "Unblock" +msgstr "차단 í•´ì œ" + +#: src/view/com/profile/ProfileHeader.tsx:308 +#: src/view/com/profile/ProfileHeader.tsx:392 +msgid "Unblock Account" +msgstr "ê³„ì • 차단 í•´ì œ" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "재게시 취소" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:138 +#: src/view/com/profile/FollowButton.tsx:55 +#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:241 +msgid "Unfollow" +msgstr "언팔로우" + +#: src/view/com/auth/create/state.ts:216 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "아쉽지만 ê³„ì •ì„ ë§Œë“¤ 수 있는 ìš”ê±´ì„ ì¶©ì¡±í•˜ì§€ 못했습니다." + +#: src/view/screens/ProfileList.tsx:572 +msgid "Unmute" +msgstr "언뮤트" + +#: src/view/com/profile/ProfileHeader.tsx:373 +msgid "Unmute Account" +msgstr "ê³„ì • 언뮤트" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:159 +msgid "Unmute thread" +msgstr "ìŠ¤ë ˆë“œ 언뮤트" + +#: src/view/screens/ProfileFeed.tsx:362 +#: src/view/screens/ProfileList.tsx:556 +msgid "Unpin" +msgstr "ê³ ì • í•´ì œ" + +#: src/view/screens/ProfileList.tsx:449 +msgid "Unpin moderation list" +msgstr "ê²€í† ë¦¬ìŠ¤íŠ¸ ê³ ì • í•´ì œ" + +#: src/view/screens/ProfileFeed.tsx:354 +msgid "Unsave" +msgstr "ì €ìž¥ í•´ì œ" + +#: src/view/com/modals/report/ReasonOptions.tsx:33 +msgid "Unwanted Sexual Content" +msgstr "ì›ì¹˜ 않는 성ì 콘í…ì¸ " + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "리스트ì—서 {displayName} ì—…ë°ì´íЏ" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "ì—…ë°ì´íЏ 사용 가능" + +#: src/view/com/modals/ChangeHandle.tsx:507 +msgid "Update to {handle}" +msgstr "{handle}로 변경" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "ì—…ë°ì´íЏ 중…" + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "í…스트 íŒŒì¼ ì—…ë¡œë“œ 경로:" + +#: src/lib/api/index.ts:114 +msgid "Uploading image #{0}..." +msgstr "{0}번째 ì´ë¯¸ì§€ 업로드 중…" + +#: src/lib/api/index.ts:152 +msgid "Uploading link thumbnail..." +msgstr "ë§í¬ 미리보기 ì´ë¯¸ì§€ 업로드 중…" + +#: src/view/screens/AppPasswords.tsx:195 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "앱 비밀번호를 사용하면 ê³„ì •ì´ë‚˜ ë¹„ë°€ë²ˆí˜¸ì— ëŒ€í•œ ì „ì²´ ì ‘ê·¼ ê¶Œí•œì„ ì œê³µí•˜ì§€ ì•Šê³ ë„ ë‹¤ë¥¸ Bluesky í´ë¼ì´ì–¸íŠ¸ì— ë¡œê·¸ì¸í• 수 있습니다." + +#: src/view/com/modals/ChangeHandle.tsx:515 +msgid "Use default provider" +msgstr "기본 ì œê³µìž ì‚¬ìš©" + +#: src/view/com/modals/AddAppPasswords.tsx:154 +msgid "Use this to sign into the other app along with your handle." +msgstr "ì´ ë¹„ë°€ë²ˆí˜¸ì™€ í•¸ë“¤ì„ ì‚¬ìš©í•˜ì—¬ 다른 ì•±ì— ë¡œê·¸ì¸í•˜ì„¸ìš”." + +#: src/view/com/modals/InviteCodes.tsx:200 +msgid "Used by:" +msgstr "사용 ê³„ì •:" + +#: src/view/com/modals/CreateOrEditList.tsx:68 +msgid "User" +msgstr "사용ìž" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "ì‚¬ìš©ìž í•¸ë“¤" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "ì‚¬ìš©ìž ë¦¬ìŠ¤íŠ¸" + +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 +msgid "Username or email address" +msgstr "ì‚¬ìš©ìž ì´ë¦„ ë˜ëŠ” ì´ë©”ì¼ ì£¼ì†Œ" + +#: src/view/screens/ProfileList.tsx:756 +msgid "Users" +msgstr "사용ìž" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "<0/>(ì´)ê°€ 팔로우한 사용ìž" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +#~ msgid "Users followed by <0/>" +#~ msgstr "<0/>(ì´)ê°€ 팔로우한 사용ìž" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "\"{0}\"ì— ìžˆëŠ” 사용ìž" + +#: src/view/com/modals/ChangeHandle.tsx:435 +msgid "Value" +msgstr "ê°’" + +#: src/view/com/modals/ChangeHandle.tsx:508 +msgid "Verify {0}" +msgstr "{0} 확ì¸" + +#: src/view/screens/Settings.tsx:803 +msgid "Verify email" +msgstr "ì´ë©”ì¼ ì¸ì¦" + +#: src/view/screens/Settings.tsx:828 +msgid "Verify my email" +msgstr "ë‚´ ì´ë©”ì¼ ì¸ì¦" + +#: src/view/screens/Settings.tsx:837 +msgid "Verify My Email" +msgstr "ë‚´ ì´ë©”ì¼ ì¸ì¦" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "새 ì´ë©”ì¼ ì¸ì¦" + +#: src/view/com/modals/VerifyEmail.tsx:104 +msgid "Verify Your Email" +msgstr "ì´ë©”ì¼ ì¸ì¦í•˜ê¸°" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "디버그 í•목 보기" + +#: src/view/com/posts/FeedSlice.tsx:103 +msgid "View full thread" +msgstr "ì „ì²´ ìŠ¤ë ˆë“œ 보기" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "아바타 보기" + +#: src/state/queries/preferences/moderation.ts:115 +msgid "Violent / Bloody" +msgstr "íë ¥ ë° ìœ í˜ˆ" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "사ì´íЏ 방문" + +#: src/view/com/modals/ContentFilteringSettings.tsx:246 +msgid "Warn" +msgstr "ê²½ê³ " + +#: src/view/com/modals/AppealLabel.tsx:48 +msgid "We'll look into your appeal promptly." +msgstr "ì´ì˜ì‹ ì²ì„ 즉시 ê²€í† í•˜ê² ìŠµë‹ˆë‹¤." + +#: src/view/com/auth/create/CreateAccount.tsx:122 +msgid "We're so excited to have you join us!" +msgstr "ë‹¹ì‹ ê³¼ 함께하게 ë˜ì–´ ì •ë§ ê¸°ì˜ë„¤ìš”!" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "죄송하지만 ì´ ì½˜í…ì¸ ëŠ” Bluesky ê³„ì •ì´ ì—†ìœ¼ë©´ ë³¼ 수 없습니다." + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "죄송하지만 현재 íŠ¸ëž˜í”½ì´ ë§Žì•„ ì´ í”¼ë“œë¥¼ ì¼ì‹œì 으로 ì‚¬ìš©í• ìˆ˜ 없습니다. ìž ì‹œ 후 다시 시ë„í•´ 주세요." + +#: src/view/screens/Search/Search.tsx:243 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "죄송하지만 ê²€ìƒ‰ì„ ì™„ë£Œí• ìˆ˜ 없습니다. 몇 ë¶„ í›„ì— ë‹¤ì‹œ 시ë„í•´ 주세요." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "죄송합니다! 페ì´ì§€ë¥¼ ì°¾ì„ ìˆ˜ 없습니다." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "<0>Bluesky</0>ì— ì˜¤ì‹ ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤" + +#: src/view/com/modals/report/Modal.tsx:172 +msgid "What is the issue with this {collectionName}?" +msgstr "ì´ {collectionName}ì— ì–´ë–¤ ë¬¸ì œê°€ 있습니까?" + +#: src/view/com/auth/SplashScreen.tsx:34 +#: src/view/com/composer/Composer.tsx:275 +msgid "What's up?" +msgstr "무슨 ì¼ì´ ì¼ì–´ë‚˜ê³ 있나요?" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "ì´ ê²Œì‹œë¬¼ì—는 ì–´ë–¤ 언어가 사용ë©ë‹ˆê¹Œ?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "ì•Œê³ ë¦¬ì¦˜ í”¼ë“œì— ì–´ë–¤ 언어를 í‘œì‹œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "ë‹µê¸€ì„ ë‹¬ 수 있는 사람" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +#~ msgid "Who can reply?" +#~ msgstr "ë‹µê¸€ì„ ë‹¬ 수 있는 사람" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "가로" + +#: src/view/com/composer/Composer.tsx:420 +msgid "Write post" +msgstr "게시물 작성" + +#: src/view/com/composer/Composer.tsx:274 +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "답글 작성하기" + +#: src/view/screens/PreferencesHomeFeed.tsx:129 +#: src/view/screens/PreferencesHomeFeed.tsx:201 +#: src/view/screens/PreferencesHomeFeed.tsx:236 +#: src/view/screens/PreferencesHomeFeed.tsx:271 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "Yes" +msgstr "예" + +#: src/view/com/posts/FollowingEmptyState.tsx:67 +#: src/view/com/posts/FollowingEndOfFeed.tsx:68 +msgid "You can also discover new Custom Feeds to follow." +msgstr "íŒ”ë¡œìš°í• ìƒˆë¡œìš´ 맞춤 피드를 ì°¾ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤." + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "ì–¸ì œë“ ì§€ 호스팅 ì œê³µìžë¥¼ ë³€ê²½í• ìˆ˜ 있습니다." + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "ì´ì œ 새 비밀번호로 로그ì¸í• 수 있습니다." + +#: src/view/com/modals/InviteCodes.tsx:66 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "ì•„ì§ ì´ˆëŒ€ 코드가 없습니다! Bluesky를 좀 ë” ì˜¤ëž˜ ì‚¬ìš©í•˜ì‹ í›„ì— ë³´ë‚´ë“œë¦¬ê² ìŠµë‹ˆë‹¤." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "ê³ ì •ëœ í”¼ë“œê°€ 없습니다." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "ì €ìž¥ëœ í”¼ë“œê°€ 없습니다!" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "ì €ìž¥ëœ í”¼ë“œê°€ 없습니다." + +#: src/view/com/post-thread/PostThread.tsx:381 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "작성ìžë¥¼ 차단했거나 작성ìžê°€ 나를 차단한 경우입니다." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "피드가 없습니다." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +msgstr "리스트가 없습니다." + +#: src/view/screens/ModerationBlockedAccounts.tsx:132 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "ì•„ì§ ì–´ë–¤ ê³„ì •ë„ ì°¨ë‹¨í•˜ì§€ 않았습니다. ê³„ì •ì„ ì°¨ë‹¨í•˜ë ¤ë©´ 해당 ê³„ì •ì˜ í”„ë¡œí•„ë¡œ ì´ë™í•˜ì—¬ ê³„ì • 메뉴ì—서 \"ê³„ì • 차단\"ì„ ì„ íƒí•˜ì„¸ìš”." + +#: src/view/screens/AppPasswords.tsx:87 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "ì•„ì§ ì•± 비밀번호를 ìƒì„±í•˜ì§€ 않았습니다. 아래 ë²„íŠ¼ì„ ëˆŒëŸ¬ ìƒì„±í• 수 있습니다." + +#: src/view/screens/ModerationMutedAccounts.tsx:131 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "ì•„ì§ ì–´ë–¤ ê³„ì •ë„ ë®¤íŠ¸í•˜ì§€ 않았습니다. ê³„ì •ì„ ë®¤íŠ¸í•˜ë ¤ë©´ 해당 ê³„ì •ì˜ í”„ë¡œí•„ë¡œ ì´ë™í•˜ì—¬ ê³„ì • 메뉴ì—서 \"ê³„ì • 뮤트\"를 ì„ íƒí•˜ì„¸ìš”." + +#: src/view/com/modals/ContentFilteringSettings.tsx:166 +msgid "You must be 18 or older to enable adult content." +msgstr "ì„±ì¸ ì½˜í…ì¸ ë¥¼ í™œì„±í™”í•˜ë ¤ë©´ 18세 ì´ìƒì´ì–´ì•¼ 합니다." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:88 +msgid "You will no longer receive notifications for this thread" +msgstr "ì´ ìŠ¤ë ˆë“œì— ëŒ€í•œ ì•Œë¦¼ì„ ë” ì´ìƒ 받지 않습니다." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:91 +msgid "You will now receive notifications for this thread" +msgstr "ì´ì œ ì´ ìŠ¤ë ˆë“œì— ëŒ€í•œ ì•Œë¦¼ì„ ë°›ìŠµë‹ˆë‹¤." + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "\"ìž¬ì„¤ì • 코드\"ê°€ í¬í•¨ëœ ì´ë©”ì¼ì„ 받게 ë˜ë©´ ì—¬ê¸°ì— í•´ë‹¹ 코드를 ìž…ë ¥í•œ ë‹¤ìŒ ìƒˆ 비밀번호를 ìž…ë ¥í•©ë‹ˆë‹¤." + +#: src/view/com/posts/FollowingEndOfFeed.tsx:48 +msgid "You've reached the end of your feed! Find some more accounts to follow." +msgstr "피드 ëì— ë„달했습니다! íŒ”ë¡œìš°í• ê³„ì •ì„ ë” ì°¾ì•„ë³´ì„¸ìš”." + +#: src/view/com/composer/Composer.tsx:264 +msgid "Your {0} has been published" +msgstr "ë‚´ {0}(ì„)를 게시했습니다." + +#: src/view/com/auth/create/Step2.tsx:58 +msgid "Your account" +msgstr "ë‚´ ê³„ì •" + +#: src/view/com/modals/DeleteAccount.tsx:65 +msgid "Your account has been deleted" +msgstr "ê³„ì •ì„ ì‚ì œí–ˆìŠµë‹ˆë‹¤." + +#: src/view/com/auth/create/Step2.tsx:146 +msgid "Your birth date" +msgstr "ìƒë…„ì›”ì¼" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "ì´ë©”ì¼ì´ ìž˜ëª»ëœ ê²ƒ 같습니다." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "ì´ë©”ì¼ì´ ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤! 가까운 ì‹œì¼ ë‚´ì— ì—°ë½ë“œë¦¬ê² 습니다." + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "ì´ë©”ì¼ì´ 변경ë˜ì—ˆì§€ë§Œ ì¸ì¦ë˜ì§€ 않았습니다. ë‹¤ìŒ ë‹¨ê³„ë¡œ 새 ì´ë©”ì¼ì„ ì¸ì¦í•´ 주세요." + +#: src/view/com/modals/VerifyEmail.tsx:110 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "ì´ë©”ì¼ì´ ì•„ì§ ì¸ì¦ë˜ì§€ 않았습니다. ì´ëŠ” 중요한 보안 단계ì´ë¯€ë¡œ 권장하는 사í•입니다." + +#: src/view/com/posts/FollowingEmptyState.tsx:47 +msgid "Your following feed is empty! Follow more users to see what's happening." +msgstr "팔로우 ì¤‘ì¸ í”¼ë“œê°€ 비어 있습니다! ë” ë§Žì€ ì‚¬ìš©ìžë¥¼ 팔로우하여 무슨 ì¼ì´ ì¼ì–´ë‚˜ê³ 있는지 확ì¸í•˜ì„¸ìš”." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "ë‚´ ì „ì²´ 핸들:" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "호스팅 ì œê³µìž" + +#: src/view/screens/Settings.tsx:403 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "앱 비밀번호를 사용하여 로그ì¸í•˜ë©´ 초대 코드가 숨겨집니다" + +#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:61 +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "ë‚´ 게시물, 좋아요, 차단 목ë¡ì€ 공개ë©ë‹ˆë‹¤. 뮤트 목ë¡ì€ 공개ë˜ì§€ 않습니다." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "ë‚´ 프로필" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "ë‚´ 프로필과 ê³„ì •ì€ ê³„ì • ì—†ì´ Bluesky ì•±ì„ ë°©ë¬¸í•˜ëŠ” 사람ì´ë‚˜ 로그ì¸í•˜ì§€ ì•Šì€ ê³„ì •ì—게 표시ë˜ì§€ 않습니다. ì´ ê¸°ëŠ¥ì„ í™œì„±í™”í•´ë„ ë‚´ í”„ë¡œí•„ì´ ë¹„ê³µê°œë¡œ ì „í™˜ë˜ì§€ëŠ” 않습니다." + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "ë‚´ 프로필과 콘í…ì¸ ëŠ” ê³„ì • ì—†ì´ Bluesky ì•±ì„ ë°©ë¬¸í•˜ëŠ” 사람ì—게 표시ë˜ì§€ 않습니다. ì´ ê¸°ëŠ¥ì„ í™œì„±í™”í•´ë„ ë‚´ í”„ë¡œí•„ì´ ë¹„ê³µê°œë¡œ ì „í™˜ë˜ì§€ëŠ” 않습니다." + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +#~ msgstr "ê³„ì •ì´ ì—†ê±°ë‚˜ 로그ì¸í•˜ì§€ ì•Šì€ ìƒíƒœì—서 Bluesky 앱ì´ë‚˜ 웹사ì´íŠ¸ë¥¼ 방문하는 사람들ì—게는 ë‚´ 프로필과 ê²Œì‹œë¬¼ì´ í‘œì‹œë˜ì§€ 않습니다." + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "ë‚´ ì‚¬ìš©ìž í•¸ë“¤" diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po new file mode 100644 index 000000000..45daf1a9f --- /dev/null +++ b/src/locale/locales/pt-BR/messages.po @@ -0,0 +1,2733 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-12-22 01:56+0530\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: pt-BR\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-05 17:00\n" +"Last-Translator: Maison da Silva\n" +"Language-Team: maisondasilva\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:168 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "{0, plural, one {# convite disponÃvel} other {# convites disponÃveis}}" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "{0}" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "Lista {0} {purposeLabel}" + +#: src/view/shell/desktop/RightNav.tsx:151 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "{invitesAvailable, plural, one {Códigos de convite: # disponÃvel} other {Códigos de convite: # disponÃveis}}" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "Código de convite {invitesAvailable} disponÃvel" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "Códigos de convite {invitesAvailable} disponÃveis" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> membros" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<0>Escolha seu</0><1>Recomendado</1><2>Feeds</2>" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some</0><1>Recommended</1><2>Users</2>" +msgstr "<0>Seguir alguns</0><1>Recomendado</1><2>Usuários</2>" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password.</0> Use this to sign into the other app along with your handle." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content.</0>" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.</0>" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "A content warning has been applied to this {0}." +msgstr "Um aviso de conteúdo foi aplicado a este {0}." + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "Uma nova versão do aplicativo está disponÃvel. Por favor, atualize para continuar usando o aplicativo." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "Acessibilidade" + +#: src/view/com/auth/login/LoginForm.tsx:163 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "Conta" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "Opções da conta" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:763 +msgid "Add" +msgstr "Adicionar" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "Adicionar um aviso de conteúdo" + +#: src/view/screens/ProfileList.tsx:753 +msgid "Add a user to this list" +msgstr "Adicionar um usuário a esta lista" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "Adicionar conta" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 +msgid "Add alt text" +msgstr "Adicionar texto alternativo" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "Adicionar detalhes" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "Adicionar detalhes ao relatório" + +#: src/view/com/composer/Composer.tsx:447 +msgid "Add link card" +msgstr "Adicionar cartão de link" + +#: src/view/com/composer/Composer.tsx:450 +msgid "Add link card:" +msgstr "Adicionar cartão de link:" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "Adicione o seguinte registro DNS ao seu domÃnio:" + +#: src/view/com/profile/ProfileHeader.tsx:353 +msgid "Add to Lists" +msgstr "Adicionar à s Listas" + +#: src/view/screens/ProfileFeed.tsx:271 +msgid "Add to my feeds" +msgstr "Adicionar aos meus feeds" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "Adicionado à lista" + +#: src/view/screens/PreferencesHomeFeed.tsx:170 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "Ajuste o número de curtidas que uma resposta deve ser mostrada no seu feed." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "Conteúdo Adulto" + +#: src/view/screens/Settings.tsx:602 +msgid "Advanced" +msgstr "Avançado" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "Texto alternativo" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "O texto alternativo descreve imagens para usuários cegos e com baixa visão e ajuda a dar contexto a todos." + +#: src/view/com/modals/VerifyEmail.tsx:118 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "Um email foi enviado para {0}. Ele inclui um código de confirmação que você pode inserir abaixo." + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "Um email foi enviado para seu endereço anterior, {0}. Ele inclui um código de confirmação que você pode inserir abaixo." + +#: src/view/com/notifications/FeedItem.tsx:237 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "e" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "Idioma do aplicativo" + +#: src/view/screens/Settings.tsx:622 +msgid "App passwords" +msgstr "Senhas de aplicativos" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "Senhas de Aplicativos" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 +msgid "Appeal content warning" +msgstr "Aviso de conteúdo de apelação" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "Aviso de Conteúdo de Apelação" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "Apelar a esta decisão" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "Apelar a esta decisão." + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "Aparência" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "" + +#: src/view/screens/AppPasswords.tsx:223 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "Tem certeza de que deseja excluir a senha do aplicativo \"{name}\"?" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Are you sure you'd like to discard this draft?" +msgstr "Tem certeza que deseja descartar este rascunho?" + +#: src/view/screens/ProfileList.tsx:353 +msgid "Are you sure?" +msgstr "Tem certeza?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 +msgid "Are you sure? This cannot be undone." +msgstr "Tem certeza? Esta ação não poderá ser desfeita." + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "Nudez artÃstica ou não erótica." + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:141 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:254 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:672 +msgid "Back" +msgstr "Voltar" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Básicos" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +msgid "Birthday" +msgstr "Aniversário" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "Aniversário:" + +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 +msgid "Block Account" +msgstr "Bloquear Conta" + +#: src/view/screens/ProfileList.tsx:523 +msgid "Block accounts" +msgstr "Bloquear contas" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Block list" +msgstr "Lista de bloqueio" + +#: src/view/screens/ProfileList.tsx:308 +msgid "Block these accounts?" +msgstr "Bloquear esta conta?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "Contas bloqueadas" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "Contas Bloqueadas" + +#: src/view/com/profile/ProfileHeader.tsx:284 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Contas bloqueadas não podem responder em seus tópicos, mencioná-lo ou interagir com você." + +#: src/view/screens/ModerationBlockedAccounts.tsx:115 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "Contas bloqueadas não podem responder em seus tópicos, mencioná-lo ou interagir com você. Você não verá o seu conteúdo e eles serão impedidos de ver o seu." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "Post bloqueado." + +#: src/view/screens/ProfileList.tsx:310 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Bloquear é público. Contas bloqueadas não podem responder em seus tópicos, mencioná-lo ou interagir com você." + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:93 +msgid "Blog" +msgstr "Blog" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:31 +msgid "Bluesky" +msgstr "Bluesky" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "Bluesky é flexÃvel." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky está aberto." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky é público." + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "O Bluesky usa convites para criar uma comunidade mais saudável. Se você não conhece ninguém com um convite, você pode se inscrever na lista de espera e nós enviaremos um em breve." + +#: src/view/screens/Moderation.tsx:225 +msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." +msgstr "O Bluesky não mostrará seu perfil e publicações para usuários desconectados. Outros aplicativos não podem honrar esta solicitação. Isso não torna a sua conta privada." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:751 +msgid "Build version {0} {1}" +msgstr "Versão da compilação {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +msgid "Business" +msgstr "Negócios" + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:221 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "Câmera" + +#: src/view/com/modals/AddAppPasswords.tsx:214 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "Só pode conter letras, números, espaços, traços e sublinhados. Deve ter pelo menos 4 caracteres, mas não mais de 32 caracteres." + +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/CreateOrEditList.tsx:267 +#: src/view/com/modals/CreateOrEditList.tsx:272 +#: src/view/com/modals/DeleteAccount.tsx:150 +#: src/view/com/modals/DeleteAccount.tsx:223 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:248 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:601 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "Cancelar" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "Cancelar exclusão da conta" + +#: src/view/com/modals/AltImage.tsx:123 +#~ msgid "Cancel add image alt text" +#~ msgstr "Cancelar adição de texto alternativo da imagem" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "Cancelar alteração de identificador" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "Cancelar corte da imagem" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "Cancelar edição do perfil" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "Cancelar citação de um post" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "Cancelar busca" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "Cancelar inscrição na lista de espera" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "Alterar" + +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 +msgid "Change handle" +msgstr "Alterar Identificador" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "Alterar Identificador" + +#: src/view/com/modals/VerifyEmail.tsx:141 +msgid "Change my email" +msgstr "Alterar meu email" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "Altere o Seu Email" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "Confira alguns feeds recomendados. Toque em + para adicioná-los a sua lista de feeds fixados." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "Confira alguns usuários recomendados. Siga-os para ver usuários semelhantes." + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "Verifique sua caixa de entrada para um email com o código de confirmação abaixo:" + +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "Escolha \"Everybody\" ou \"Nobody\"" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "Escolher o Serviço" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "Escolha os algoritmos que alimentam a sua experiência com feeds personalizados." + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:127 +msgid "Choose your password" +msgstr "Escolha sua senha" + +#: src/view/screens/Settings.tsx:727 +msgid "Clear all legacy storage data" +msgstr "Limpar todos os dados de armazenamento legados" + +#: src/view/screens/Settings.tsx:729 +msgid "Clear all legacy storage data (restart after this)" +msgstr "Limpar todos os dados de armazenamento legados (reinicie após isso)" + +#: src/view/screens/Settings.tsx:739 +msgid "Clear all storage data" +msgstr "Limpar todos os dados de armazenamento" + +#: src/view/screens/Settings.tsx:741 +msgid "Clear all storage data (restart after this)" +msgstr "Limpar todos os dados de armazenamento (reiniciar após isso)" + +#: src/view/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 +msgid "Clear search query" +msgstr "Limpar consulta de busca" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "Fechar alerta" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "Fechar gaveta inferior" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "Fechar imagem" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "Fechar visualizador de imagens" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "Feche o painel de navegação" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "Diretrizes da Comunidade" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "Escrever resposta" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:225 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 +msgid "Confirm" +msgstr "Confirme" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "Confirmar Alterações" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "Confirmar configurações de idioma de conteúdo" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "Confirmar a exclusão da conta" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:176 +#: src/view/com/modals/VerifyEmail.tsx:159 +msgid "Confirmation code" +msgstr "Código de confirmação" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:273 +msgid "Connecting..." +msgstr "Conectando..." + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "Filtragem de conteúdo" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "Filtragem de Conteúdo" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "Idiomas de Conteúdo" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "Aviso de Conteúdo" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "Avisos de conteúdo" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "Continuar" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "Copiado" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "Copiar" + +#: src/view/screens/ProfileList.tsx:385 +msgid "Copy link to list" +msgstr "Copiar link da lista" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +msgid "Copy link to post" +msgstr "Copiar link para postar" + +#: src/view/com/profile/ProfileHeader.tsx:338 +msgid "Copy link to profile" +msgstr "Copiar link do perfil" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 +msgid "Copy post text" +msgstr "Copiar texto da postagem" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "PolÃtica de Direitos Autorais" + +#: src/view/screens/ProfileFeed.tsx:95 +msgid "Could not load feed" +msgstr "Não foi possÃvel carregar o feed" + +#: src/view/screens/ProfileList.tsx:839 +msgid "Could not load list" +msgstr "Não foi possÃvel carregar a lista" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +msgid "Create a new account" +msgstr "Criar uma nova conta" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "Create Account" +msgstr "Criar Conta" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "Criar uma nova conta" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "Criado {0}" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "DomÃnio personalizado" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "Personalize a mÃdia de sites externos." + +#: src/view/screens/Settings.tsx:648 +msgid "Danger Zone" +msgstr "Zona de Perigo" + +#: src/view/screens/Settings.tsx:411 +#~ msgid "Dark" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:655 +msgid "Delete account" +msgstr "Excluir a conta" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "Excluir a Conta" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "Excluir senha do aplicativo" + +#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:412 +msgid "Delete List" +msgstr "Excluir Lista" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "Excluir minha conta" + +#: src/view/screens/Settings.tsx:665 +msgid "Delete my account…" +msgstr "Excluir minha conta…" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 +msgid "Delete post" +msgstr "Excluir post" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 +msgid "Delete this post?" +msgstr "Excluir este post?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "Post excluÃdo." + +#: src/view/com/modals/CreateOrEditList.tsx:218 +#: src/view/com/modals/CreateOrEditList.tsx:234 +#: src/view/com/modals/EditProfile.tsx:197 +#: src/view/com/modals/EditProfile.tsx:209 +msgid "Description" +msgstr "Descrição" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "Servidor de Desenvolvimento" + +#: src/view/screens/Settings.tsx:670 +msgid "Developer Tools" +msgstr "Ferramentas do Desenvolvedor" + +#: src/view/com/composer/Composer.tsx:211 +msgid "Did you want to say anything?" +msgstr "Você gostaria de dizer alguma coisa?" + +#: src/view/com/composer/Composer.tsx:144 +msgid "Discard" +msgstr "Descartar" + +#: src/view/com/composer/Composer.tsx:138 +msgid "Discard draft" +msgstr "Descartar rascunho" + +#: src/view/screens/Moderation.tsx:207 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "Desencorajar aplicativos de mostrar minha conta para usuários desconectados" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "Descubra novos feeds" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "Nome de exibição" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "Nome de Exibição" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "DomÃnio verificado!" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/Threadgate.tsx:129 +#: src/view/com/modals/Threadgate.tsx:132 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 +msgid "Done" +msgstr "Feito" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "Feito{extraText}" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "Cada código só funciona uma vez. Você receberá mais códigos de convite periodicamente." + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "Editar imagem" + +#: src/view/screens/ProfileList.tsx:400 +msgid "Edit list details" +msgstr "Editar detalhes da lista" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "Editar Meus Feeds" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "Editar meu perfil" + +#: src/view/com/profile/ProfileHeader.tsx:453 +msgid "Edit profile" +msgstr "Editar perfil" + +#: src/view/com/profile/ProfileHeader.tsx:456 +msgid "Edit Profile" +msgstr "Editar Perfil" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "Editar Feeds Salvos" + +#: src/view/com/auth/create/Step2.tsx:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "Email" + +#: src/view/com/auth/create/Step2.tsx:99 +msgid "Email address" +msgstr "Endereço de email" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "Email Atualizado" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "Email:" + +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "Ativar {0} somente" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "Ativar MÃdia Externa" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 +msgid "Enable this setting to only see replies between people you follow." +msgstr "Ative esta configuração para ver apenas as respostas entre as pessoas que você segue." + +#: src/view/screens/Profile.tsx:426 +msgid "End of feed" +msgstr "Fim do feed" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "Digite o endereço do seu provedor:" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "Digite o domÃnio que você deseja usar" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "Digite o email que você usou para criar a sua conta. Nós lhe enviaremos um \"código de redefinição\" para que você possa definir uma nova senha." + +#: src/view/com/auth/create/Step2.tsx:104 +msgid "Enter your email address" +msgstr "Digite seu endereço de email" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "Digite seu novo endereço de email abaixo." + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "Digite seu nome de usuário e senha" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "Erro:" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "Todos" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "Expandir texto alternativo" + +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "MÃdia Externa" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "A mÃdia externa pode permitir que os sites coletem informações sobre você e seu dispositivo. Nenhuma informação é enviada ou solicitada até que você pressione o botão \"play\"." + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "Preferências de MÃdia Externa" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "Falha ao carregar feeds recomendados" + +#: src/view/screens/Feeds.tsx:556 +msgid "Feed offline" +msgstr "Feed offline" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "Preferências de Feed" + +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "Comentários" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/screens/Profile.tsx:165 +#: src/view/shell/bottom-bar/BottomBar.tsx:181 +#: src/view/shell/desktop/LeftNav.tsx:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "Feeds" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "Os feeds são criados por usuários para curadoria de conteúdo. Escolha alguns feeds que você acha interessantes." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "Os feeds são algoritmos personalizados que os usuários criam com um pouco de experiência em condificação. <0/> para mais informações." + +#: src/view/screens/Search/Search.tsx:427 +msgid "Find users on Bluesky" +msgstr "Encontrar usuários no Bluesky" + +#: src/view/screens/Search/Search.tsx:425 +msgid "Find users with the search tool on the right" +msgstr "Encontre usuários com a ferramenta de busca à direita" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "Procurando contas semelhantes..." + +#: src/view/screens/PreferencesHomeFeed.tsx:108 +msgid "Fine-tune the content you see on your home screen." +msgstr "Ajuste o conteúdo que você vê na sua tela inicial." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "Ajuste os tópicos de discussão." + +#: src/view/com/profile/ProfileHeader.tsx:538 +msgid "Follow" +msgstr "Seguir" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "Seguir alguns usuários para começar. Nós podemos recomendar mais usuários com base em quem você acha interessante." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "Usuários seguidos" + +#: src/view/screens/PreferencesHomeFeed.tsx:151 +msgid "Followed users only" +msgstr "Somente usuários seguidos" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "Seguidores" + +#: src/view/com/profile/ProfileHeader.tsx:624 +msgid "following" +msgstr "seguindo" + +#: src/view/com/profile/ProfileHeader.tsx:522 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "Seguindo" + +#: src/view/com/profile/ProfileHeader.tsx:571 +msgid "Follows you" +msgstr "Segue você" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "Por motivos de segurança, precisamos enviar um código de confirmação para seu endereço de email." + +#: src/view/com/modals/AddAppPasswords.tsx:207 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "Por motivos de segurança, você não poderá ver isto novamente. Se você perder esta senha, precisará gerar uma nova." + +#: src/view/com/auth/login/LoginForm.tsx:236 +msgid "Forgot" +msgstr "Esqueceu" + +#: src/view/com/auth/login/LoginForm.tsx:233 +msgid "Forgot password" +msgstr "Esqueci a senha" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "Esqueci a Senha" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "Galeria" + +#: src/view/com/modals/VerifyEmail.tsx:183 +msgid "Get Started" +msgstr "Vamos começar" + +#: src/view/com/auth/LoggedOut.tsx:81 +#: src/view/com/auth/LoggedOut.tsx:82 +#: src/view/com/util/moderation/ScreenHider.tsx:123 +#: src/view/shell/desktop/LeftNav.tsx:104 +msgid "Go back" +msgstr "Voltar atrás" + +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 +msgid "Go Back" +msgstr "Voltar Atrás" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:283 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "Ir para o próximo" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "Identificador" + +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "Ajuda" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "Aqui está a sua senha do aplicativo." + +#: src/view/com/notifications/FeedItem.tsx:324 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Ocultar" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "Ocultar post" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "Ocultar este post?" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide user list" +msgstr "Ocultar lista de usuários" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "Hmm, ocorreu algum tipo de problema ao entrar em contato com o servidor do feed. Por favor, avise o proprietário do feed sobre este problema." + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "Hmm, o servidor de feed parece estar mal configurado. Por favor, deixe o proprietário do feed saber sobre este problema." + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "Hmm, o servidor de feed parece estar offline. Por favor, avise o autor do feed sobre este problema." + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "Hmm, o servidor de feed deu uma má resposta. Por favor, avise o autor do feed sobre este problema." + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "Hmm, estamos com problemas para encontrar este feed. Ele pode ter sido excluÃdo." + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "Página Inicial" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx:101 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "Preferências do Feed Inicial" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "Provedor de hospedagem" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "Endereço do provedor de hospedagem" + +#: src/view/com/modals/VerifyEmail.tsx:208 +msgid "I have a code" +msgstr "Eu tenho um código" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "Eu tenho meu próprio domÃnio" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "Se nenhum for selecionado, adequado para todas as idades." + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "Texto alternativo da imagem" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "Opções de imagem" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:115 +msgid "Invalid username or password" +msgstr "Nome de usuário ou senha inválido" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "Convite" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "Convide um Amigo" + +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Invite code" +msgstr "Código de convite" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "Código de convite não aceito. Verifique se você o inseriu corretamente e tente novamente." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "Códigos de convite: {invitesAvailable} disponÃvel" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +msgid "Jobs" +msgstr "Empregos" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "Junte-se à lista de espera" + +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 +msgid "Join the waitlist." +msgstr "Junte-se à lista de espera." + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "Junte-se à Lista de Espera" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "Seleção de idioma" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "Configurações de Idiomas" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "Idiomas" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "Saiba mais" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:104 +msgid "Learn More" +msgstr "Saiba Mais" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:101 +msgid "Learn more about this warning" +msgstr "Saiba mais sobre este aviso" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "Saiba mais sobre o que é público no Bluesky." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "Deixe todos desmarcados para ver qualquer idioma." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Saindo do Bluesky" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "Vamos redefinir sua senha!" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "Biblioteca" + +#: src/view/screens/Settings.tsx:405 +#~ msgid "Light" +#~ msgstr "" + +#: src/view/screens/ProfileFeed.tsx:586 +msgid "Like this feed" +msgstr "Curtir este feed" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "Curtido por" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "Curtidas" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account to logged-out users" +#~ msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "Listar Avatar" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "Lista de Nomes" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:379 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "Listas" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "Carregar mais posts" + +#: src/view/screens/Notifications.tsx:148 +msgid "Load new notifications" +msgstr "Carregar novas notificações" + +#: src/view/com/feeds/FeedPage.tsx:189 +msgid "Load new posts" +msgstr "Carregar novos posts" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "Carregando..." + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "Servidor de desenvolvimento local" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "Logged-out users" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "Visibilidade desconectada" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "Fazer login em uma conta que não está listada" + +#: src/view/screens/ProfileFeed.tsx:472 +#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +#~ msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "Certifique-se de que é para lá que você pretende ir!" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "MÃdia" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "usuários mencionados" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "Usuários mencionados" + +#: src/view/screens/Search/Search.tsx:537 +msgid "Menu" +msgstr "Menu" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "Mensagem do servidor" + +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "Moderação" + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "Listas de moderação" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "Listas de Moderação" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "Mais feeds" + +#: src/view/com/profile/ProfileHeader.tsx:548 +#: src/view/screens/ProfileFeed.tsx:361 +#: src/view/screens/ProfileList.tsx:584 +msgid "More options" +msgstr "Mais opções" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "Respostas mais curtidas primeiro" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Silenciar Conta" + +#: src/view/screens/ProfileList.tsx:511 +msgid "Mute accounts" +msgstr "Silenciar contas" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Mute list" +msgstr "Lista de silenciados" + +#: src/view/screens/ProfileList.tsx:271 +msgid "Mute these accounts?" +msgstr "Silenciar essas contas?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Mute thread" +msgstr "Silenciar tópico" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "Contas silenciadas" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "Contas Silenciadas" + +#: src/view/screens/ModerationMutedAccounts.tsx:115 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "Contas silenciadas tem seus posts removidos do seu feed e das suas notificações. Os silenciamentos são completamente privados." + +#: src/view/screens/ProfileList.tsx:273 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Silenciar é privado. Contas silenciadas podem interagir com você, mas você não verá postagens ou receber notificações delas." + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "Meu Aniversário" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "Meus Feeds" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "Meu Perfil" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "Meus Feeds Salvos" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "Nome" + +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "Nunca carregue incorporações de {0}" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "Nunca perca o acesso aos seus seguidores e dados." + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "Novo" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "Novo post" + +#: src/view/shell/desktop/LeftNav.tsx:258 +msgid "New Post" +msgstr "Novo Post" + +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "Respostas mais recentes primeiro" + +#: src/view/com/auth/create/CreateAccount.tsx:154 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:286 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +msgid "Next" +msgstr "Próximo" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "Próxima imagem" + +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "No" +msgstr "Não" + +#: src/view/screens/ProfileFeed.tsx:579 +#: src/view/screens/ProfileList.tsx:720 +msgid "No description" +msgstr "Sem descrição" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "Nenhum resultado" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "Nenhum resultado encontrado para \"{query}\"" + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "Nenhum resultado encontrado para {query}" + +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "Não, obrigado" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "Ninguém" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "Não Aplicável." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:232 +msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." +msgstr "Nota: o Bluesky é uma rede aberta e pública. Essa configuração limita somente a visibilidade do seu conteúdo no site e aplicativo do Bluesky, e outros aplicativos podem não respeitar essa configuração. Seu conteúdo ainda pode ser exibido para usuários desconectados por outros aplicativos e sites." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "Notificações" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "Oh, não!" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "Ok" + +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "Respostas mais antigas primeiro" + +#: src/view/com/composer/Composer.tsx:363 +msgid "One or more images is missing alt text." +msgstr "Uma ou mais imagens estão sem texto alternativo." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "Apenas {0} pode responder." + +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "Abrir seletor de emojis" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "Abrir navegação" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "Abre definições de idioma configuráveis" + +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "Abre as configurações de incorporações externas" + +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "Abre a lista de códigos de convite" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "Abre modal para usar o domÃnio personalizado" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "Abre configurações de moderação" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "Abre a tela com todos os feeds salvos" + +#: src/view/screens/Settings.tsx:614 +msgid "Opens the app password settings page" +msgstr "Abre a página de configurações de senha do aplicativo" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "Abre as preferências do feed inicial" + +#: src/view/screens/Settings.tsx:697 +msgid "Opens the storybook page" +msgstr "Abre a página do storybook" + +#: src/view/screens/Settings.tsx:677 +msgid "Opens the system log page" +msgstr "Abre a página de log do sistema" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "Abrir as preferências dos tópicos" + +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "Ou combine estas opções:" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "Outra conta" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "Outro serviço" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "Outro..." + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "Página não encontrada" + +#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:221 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "Senha" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "Senha atualizada" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "Senha atualizada!" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "Imagens destinadas a adultos." + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "Feeds Fixados" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "Reproduzir {0}" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "Reproduzir VÃdeo" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "Reproduz o GIF" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "Por favor, escolha o seu identificador." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "Por favor, escolha sua senha." + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "Por favor, confirme seu email antes de alterá-lo. Este é um requisito temporário enquanto ferramentas de atualização de email são adicionadas, e em breve serão removidos." + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "Por favor, insira um nome único para esta Senha do Aplicativo ou use nossa senha gerada aleatoriamente." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "Por favor, digite o seu email." + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "Por favor, digite sua senha também:" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this content warning was incorrectly applied!" +msgstr "Por favor, diga-nos por que você acha que este aviso de conteúdo foi aplicado incorretamente!" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "" + +#: src/view/com/composer/Composer.tsx:215 +msgid "Please wait for your link card to finish loading" +msgstr "Aguarde até que o cartão de link termine de carregar" + +#: src/view/com/composer/Composer.tsx:346 +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "Post" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "Post oculto" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "Idioma do post" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "Idioma do Post" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "Post não encontrado" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "Posts" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "Link Potencialmente Enganoso" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "Imagem anterior" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "Idioma Principal" + +#: src/view/screens/PreferencesThreads.tsx:97 +msgid "Prioritize Your Follows" +msgstr "Priorizar seus Seguidores" + +#: src/view/screens/Settings.tsx:570 +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Privacy" +msgstr "Privacidade" + +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:783 +#: src/view/shell/Drawer.tsx:262 +msgid "Privacy Policy" +msgstr "PolÃtica de Privacidade" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "Processando..." + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "Perfil" + +#: src/view/screens/Settings.tsx:841 +msgid "Protect your account by verifying your email." +msgstr "Proteja a sua conta verificando o seu email." + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "Listas públicas e compartilháveis de usuários para silenciar ou bloquear em massa." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "Listas públicas e compartilháveis que podem gerar feeds." + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "Citar post" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "Citar Post" + +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "Aleatório (também conhecido como \"Poster's Roulette\")" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "Ãndices" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "Feeds Recomendados" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "Usuários Recomendados" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:282 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "Remover" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "Remover {0} dos meus feeds?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "Remover conta" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "Remover feed" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:271 +msgid "Remove from my feeds" +msgstr "Remover dos meus feeds" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "Remover imagem" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "Remover visualização da imagem" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "Remover este feed dos meus feeds?" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "Remover esse feed de seus feeds salvos?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "Removido da lista" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "Respostas" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "Respostas para este tópico estão desativadas" + +#: src/view/screens/PreferencesHomeFeed.tsx:141 +msgid "Reply Filters" +msgstr "Filtros de Resposta" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "Denunciar {collectionName}" + +#: src/view/com/profile/ProfileHeader.tsx:404 +msgid "Report Account" +msgstr "Denunciar Conta" + +#: src/view/screens/ProfileFeed.tsx:291 +msgid "Report feed" +msgstr "Denunciar feed" + +#: src/view/screens/ProfileList.tsx:426 +msgid "Report List" +msgstr "Denunciar Lista" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 +msgid "Report post" +msgstr "Denunciar post" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "Repostar" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "Repostar ou citar uma post" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "Repostado por" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "Solicitar Alteração" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "Exigir texto alternativo antes de postar" + +#: src/view/com/auth/create/Step2.tsx:68 +msgid "Required for this provider" +msgstr "Obrigatório para este provedor" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "Código de redefinição" + +#: src/view/screens/Settings.tsx:719 +msgid "Reset onboarding state" +msgstr "Redefinir estado de integração" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "Redefinir senha" + +#: src/view/screens/Settings.tsx:709 +msgid "Reset preferences state" +msgstr "Redefinir estado das preferências" + +#: src/view/screens/Settings.tsx:717 +msgid "Resets the onboarding state" +msgstr "Redefine o estado de integração" + +#: src/view/screens/Settings.tsx:707 +msgid "Resets the preferences state" +msgstr "Redefine o estado das preferências" + +#: src/view/com/auth/create/CreateAccount.tsx:163 +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "Tente novamente" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:249 +#: src/view/com/modals/CreateOrEditList.tsx:257 +#: src/view/com/modals/EditProfile.tsx:223 +msgid "Save" +msgstr "Salvar" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "Salvar texto alternativo" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "Salvar Alterações" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "Salvar identificador alterado" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "Salvar corte de imagem" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "Feeds Salvos" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "Buscar" + +#: src/view/screens/Search/Search.tsx:390 +#~ msgid "Search for posts and users." +#~ msgstr "" + +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +msgid "Search for users" +msgstr "Buscar por usuários" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "Passo de Segurança Necessário" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "Veja o que vem a seguir" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Selecione Bluesky Social" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "Selecione em uma conta existente" + +#: src/view/com/auth/login/LoginForm.tsx:147 +msgid "Select service" +msgstr "Selecione o serviço" + +#: src/view/screens/LanguageSettings.tsx:281 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "Selecione quais idiomas você deseja que seus feeds subscritos incluam. Se nenhum for selecionado, todas as lÃnguas serão exibidas." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "Selecione o idioma do seu aplicativo para o texto padrão a ser exibido no aplicativo" + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "Selecione seu idioma preferido para as traduções do seu feed." + +#: src/view/com/modals/VerifyEmail.tsx:196 +msgid "Send Confirmation Email" +msgstr "Enviar Email de Confirmação" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "Enviar email" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "Enviar Email" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "Enviar comentários" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "Enviar um Relatório" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "Defina uma nova senha" + +#: src/view/screens/PreferencesHomeFeed.tsx:222 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "Defina esta configuração como \"Não\" para ocultar todos os posts citados do seu feed. Repostagens ainda serão visÃveis." + +#: src/view/screens/PreferencesHomeFeed.tsx:119 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "Defina essa configuração como \"Não\" para ocultar todas as respostas do seu feed." + +#: src/view/screens/PreferencesHomeFeed.tsx:188 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "Defina essa configuração como \"Não\" para ocultar todas as repostagens do seu feed." + +#: src/view/screens/PreferencesThreads.tsx:122 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "Defina esta configuração como \"Sim\" para mostrar respostas em uma visualização thread. Este é um recurso experimental." + +#: src/view/screens/PreferencesHomeFeed.tsx:258 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "Defina essa configuração como \"Sim\" para mostrar amostras de seus feeds salvos no seu seguinte feed. Este é um recurso experimental." + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "Configurações" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "Atividade sexual ou nudez erótica." + +#: src/view/com/profile/ProfileHeader.tsx:338 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:385 +msgid "Share" +msgstr "Compartilhar" + +#: src/view/screens/ProfileFeed.tsx:303 +msgid "Share feed" +msgstr "Compartilhar feed" + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "" + +#: src/view/com/util/moderation/ContentHider.tsx:105 +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "Mostrar" + +#: src/view/com/util/moderation/ScreenHider.tsx:132 +msgid "Show anyway" +msgstr "Mostrar mesmo assim" + +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "Mostrar incorporações de {0}" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 +msgid "Show Posts from My Feeds" +msgstr "Mostrar Posts dos meus Feeds" + +#: src/view/screens/PreferencesHomeFeed.tsx:219 +msgid "Show Quote Posts" +msgstr "Mostrar Posts de Citações" + +#: src/view/screens/PreferencesHomeFeed.tsx:116 +msgid "Show Replies" +msgstr "Mostrar Respostas" + +#: src/view/screens/PreferencesThreads.tsx:100 +msgid "Show replies by people you follow before all other replies." +msgstr "Mostrar as respostas de pessoas que você segue antes de todas as outras respostas." + +#: src/view/screens/PreferencesHomeFeed.tsx:185 +msgid "Show Reposts" +msgstr "Mostrar Repostagens" + +#: src/view/com/notifications/FeedItem.tsx:345 +msgid "Show users" +msgstr "Mostrar usuários" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:70 +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:54 +#: src/view/shell/bottom-bar/BottomBar.tsx:285 +#: src/view/shell/bottom-bar/BottomBar.tsx:286 +#: src/view/shell/bottom-bar/BottomBar.tsx:288 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:177 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:180 +#: src/view/shell/NavSignupCard.tsx:58 +#: src/view/shell/NavSignupCard.tsx:59 +msgid "Sign in" +msgstr "Fazer login" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:78 +#: src/view/com/auth/SplashScreen.tsx:57 +#: src/view/com/auth/SplashScreen.web.tsx:87 +msgid "Sign In" +msgstr "Fazer Login" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "Fazer login como {0}" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "Fazer login como..." + +#: src/view/com/auth/login/LoginForm.tsx:134 +msgid "Sign into" +msgstr "Fazer login" + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +msgid "Sign out" +msgstr "Sair" + +#: src/view/shell/bottom-bar/BottomBar.tsx:275 +#: src/view/shell/bottom-bar/BottomBar.tsx:276 +#: src/view/shell/bottom-bar/BottomBar.tsx:278 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:167 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:170 +#: src/view/shell/NavSignupCard.tsx:49 +#: src/view/shell/NavSignupCard.tsx:50 +#: src/view/shell/NavSignupCard.tsx:52 +msgid "Sign up" +msgstr "Inscrever-se" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "Inscreva-se ou faça login para se juntar à conversa" + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "É Necessário Fazer Login" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "Entrou como" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "Pular" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "Classificar Respostas" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "Classificar respostas para o mesmo post por:" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "Quadrado" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "Encenação" + +#: src/view/screens/Settings.tsx:763 +msgid "Status page" +msgstr "Página de status" + +#: src/view/screens/Settings.tsx:699 +msgid "Storybook" +msgstr "Storybook" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "Enviar" + +#: src/view/screens/ProfileList.tsx:575 +msgid "Subscribe" +msgstr "Assinar" + +#: src/view/screens/ProfileList.tsx:571 +msgid "Subscribe to this list" +msgstr "Assinar esta lista" + +#: src/view/screens/Search/Search.tsx:362 +msgid "Suggested Follows" +msgstr "Seguidores Sugeridos" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "Suporte" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "Alterar Conta" + +#: src/view/screens/Settings.tsx:398 +#~ msgid "System" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:679 +msgid "System log" +msgstr "Log do sistema" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "Alto" + +#: src/view/shell/desktop/RightNav.tsx:93 +msgid "Terms" +msgstr "Termos" + +#: src/view/screens/Settings.tsx:777 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "Termos de Serviço" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 +msgid "Text input field" +msgstr "Campo de entrada de texto" + +#: src/view/com/profile/ProfileHeader.tsx:306 +msgid "The account will be able to interact with you after unblocking." +msgstr "A conta poderá interagir com você após o desbloqueio." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "As Diretrizes da Comunidade foram movidas para <0/>" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "A PolÃtica de Direitos Autorais foi movida para <0/>" + +#: src/view/com/post-thread/PostThread.tsx:433 +msgid "The post may have been deleted." +msgstr "O post pode ter sido excluÃdo." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "A PolÃtica de Privacidade foi movida para <0/>" + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "O formulário de suporte foi movido. Se precisar de ajuda, por favor <0/> ou visite {HELP_DESK_URL} para entrar em contato conosco." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "Os Termos de Serviço foram movidos para" + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "Houve um problema inesperado no aplicativo. Por favor, deixe-nos saber se isso aconteceu com você!" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +#~ msgid "This {0} has been labeled." +#~ msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "This {screenDescription} has been flagged:" +msgstr "Este {screenDescription} foi sinalizado:" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +msgid "This account has requested that users sign in to view their profile." +msgstr "Esta conta solicitou que os usuários fizessem login para visualizar seus perfis." + +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "Este conteúdo é hospedado por {0}. Deseja ativar a mÃdia externa?" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "Este conteúdo não está visÃvel sem uma conta Bluesky." + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "Este feed está recebendo alto tráfego e está temporariamente indisponÃvel. Por favor, tente novamente mais tarde." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "Esta informação não é compartilhada com outros usuários." + +#: src/view/com/modals/VerifyEmail.tsx:113 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "Isso é importante caso você precise alterar seu email ou redefinir sua senha." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "Este é o serviço que o mantém online." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "Esse link está levando você ao seguinte site:" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "Este post foi excluÃdo." + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "Este aviso só está disponÃvel para publicações com mÃdia anexada." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:178 +msgid "This will hide this post from your feeds." +msgstr "Isso ocultará esse post de seus feeds." + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:503 +msgid "Thread Preferences" +msgstr "Preferências de Tópico" + +#: src/view/screens/PreferencesThreads.tsx:119 +msgid "Threaded Mode" +msgstr "Modo Tópico" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "Alternar menu suspenso" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "Transformações" + +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 +msgid "Translate" +msgstr "Traduzir" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "Tente novamente" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Un-block list" +msgstr "Lista de desbloqueio" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Un-mute list" +msgstr "Lista de não silenciados" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:120 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "Não foi possÃvel entrar em contato com seu serviço. Por favor, verifique sua conexão à internet." + +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 +msgid "Unblock" +msgstr "Desbloquear" + +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 +msgid "Unblock Account" +msgstr "Desbloquear Conta" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "Desfazer repost" + +#: src/view/com/auth/create/state.ts:216 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "Infelizmente, você não atende aos requisitos para criar uma conta." + +#: src/view/com/profile/ProfileHeader.tsx:369 +msgid "Unmute Account" +msgstr "Não Silenciar Conta" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Unmute thread" +msgstr "Não silenciar o tópico" + +#: src/view/screens/ProfileList.tsx:441 +msgid "Unpin moderation list" +msgstr "Desafixar lista de moderação" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "Atualizar {displayName} nas Listas" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "Atualização DisponÃvel" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "Atualizando..." + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "Carregar um arquivo de texto para:" + +#: src/view/screens/AppPasswords.tsx:194 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "Use as senhas de aplicativos para fazer login em outros clientes Bluesky sem dar acesso total à sua conta ou senha." + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "Usar provedor padrão" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "Use isto para entrar no outro aplicativo juntamente com seu identificador." + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "Usado por:" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "Identificador de usuário" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "Listas de Usuários" + +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 +msgid "Username or email address" +msgstr "Nome de usuário ou endereço de email" + +#: src/view/screens/ProfileList.tsx:747 +msgid "Users" +msgstr "Usuários" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "usuários seguidos por <0/>" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +#~ msgid "Users followed by <0/>" +#~ msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "Usuários em \"{0}\"" + +#: src/view/screens/Settings.tsx:802 +msgid "Verify email" +msgstr "Verificar email" + +#: src/view/screens/Settings.tsx:827 +msgid "Verify my email" +msgstr "Verificar meu email" + +#: src/view/screens/Settings.tsx:836 +msgid "Verify My Email" +msgstr "Verificar Meu Email" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "Verificar Novo Email" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "Ver entrada de depuração" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "Ver o avatar" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "Visitar Site" + +#: src/view/com/auth/create/CreateAccount.tsx:122 +msgid "We're so excited to have you join us!" +msgstr "Estamos muito felizes por você se juntar a nós!" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "" + +#: src/view/screens/Search/Search.tsx:243 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "Lamentamos, mas sua busca não pôde ser concluÃda. Por favor, tente novamente em alguns minutos." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "Sentimos muito! Não conseguimos encontrar a página que você estava procurando." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "Bem-vindo ao <0>Bluesky</0>" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "Qual é o problema com este {collectionName}?" + +#: src/view/com/auth/SplashScreen.tsx:34 +msgid "What's up?" +msgstr "Que há de novo?" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "Quais idiomas são usados neste post?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "Quais idiomas você gostaria de ver nos seus feeds algoritmo?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "Quem pode responder" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +#~ msgid "Who can reply?" +#~ msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "Largo" + +#: src/view/com/composer/Composer.tsx:418 +msgid "Write post" +msgstr "Escrever post" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "Escreva sua resposta" + +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "Yes" +msgstr "Sim" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "Você pode alterar os provedores de hospedagem a qualquer momento." + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "Agora você pode entrar com a sua nova senha." + +#: src/view/com/modals/InviteCodes.tsx:64 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "Você ainda não tem nenhum código de convite! Nós lhe enviaremos alguns quando você estiver no Bluesky por mais um pouco de tempo." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "Você não tem feeds fixados." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "Você não tem feeds salvos!" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "Você não tem feeds salvos." + +#: src/view/com/post-thread/PostThread.tsx:381 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "Você bloqueou o autor ou foi bloqueado pelo autor." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "Você não tem feeds." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +msgstr "Você não tem listas." + +#: src/view/screens/ModerationBlockedAccounts.tsx:132 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "Você ainda não bloqueou nenhuma conta. Para bloquear uma conta, acesse o perfil e selecione \"Bloquear conta\" no menu da conta." + +#: src/view/screens/AppPasswords.tsx:86 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "Você ainda não criou nenhuma senha do aplicativo. Você pode criar uma pressionando o botão abaixo." + +#: src/view/screens/ModerationMutedAccounts.tsx:131 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "Você ainda não silenciou nenhuma conta. Para silenciar uma conta, vá ao perfil deles e selecione \"Silenciar conta\" no menu em sua conta." + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "Você receberá um email com um \"código de redefinição\". Digite esse código aqui, e então digite sua nova senha." + +#: src/view/com/auth/create/Step2.tsx:58 +msgid "Your account" +msgstr "Sua conta" + +#: src/view/com/auth/create/Step2.tsx:146 +msgid "Your birth date" +msgstr "Sua data de nascimento" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "Seu email parece ser inválido." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "Seu email foi salvo! Entraremos em contato em breve." + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "Seu email foi atualizado mas não foi verificado. Como próximo passo, por favor verifique seu novo email." + +#: src/view/com/modals/VerifyEmail.tsx:108 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "Seu email ainda não foi verificado. Esta é uma etapa de segurança importante que recomendamos." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "Seu identificador completo será" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "Seu provedor de hospedagem" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "Seus códigos de convite estão ocultos quando conectado com uma Senha do Aplicativo" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "Suas postagens, curtidas e blocos são públicos. Mudos são privados." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "Seu perfil" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +#~ msgstr "" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "Seu identificador de usuário" diff --git a/src/locale/locales/uk/messages.po b/src/locale/locales/uk/messages.po new file mode 100644 index 000000000..365cca389 --- /dev/null +++ b/src/locale/locales/uk/messages.po @@ -0,0 +1,2738 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-11-05 16:01-0800\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: uk\n" +"Project-Id-Version: bsky-app-ua\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-04 14:24\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: bsky-app-ua\n" +"X-Crowdin-Project-ID: 636504\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /main/src/locale/locales/en/messages.po\n" +"X-Crowdin-File-ID: 14\n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:168 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "{0, plural, one {ДоÑтупний # код запрошеннÑ} few {ДоÑтупно # коди запрошеннÑ} other {ДоÑтупно # кодів запрошеннÑ}}" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "{0}" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "{0} СпиÑок {purposeLabel}" + +#: src/view/shell/desktop/RightNav.tsx:151 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "{invitesAvailable, plural, one {Коди запрошень: доÑтупно #} other {Коди запрошень: доÑтупно #}}" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "ДоÑтупний код запрошеннÑ" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "ДоÑтупно {invitesAvailable} кодів запрошеннÑ" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> учаÑників" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<0>Оберіть Ñвої</0><1>рекомендовані</1><2>Ñтрічки</2>" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some</0><1>Recommended</1><2>Users</2>" +msgstr "<0>ПідпишітьÑÑ Ð½Ð° деÑких </0><1>рекомендованих </1><2>кориÑтувачів</2>" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password.</0> Use this to sign into the other app along with your handle." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content.</0>" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.</0>" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "A content warning has been applied to this {0}." +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚ було додано до цього {0}." + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "ДоÑтупна нова верÑÑ–Ñ. Будь лаÑка, оновіть заÑтоÑунок, щоб продовжити ним кориÑтуватиÑÑ." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "ДоÑтупніÑть" + +#: src/view/com/auth/login/LoginForm.tsx:163 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "Обліковий запиÑ" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "Параметри облікового запиÑу" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:763 +msgid "Add" +msgstr "Додати" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "Додати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚" + +#: src/view/screens/ProfileList.tsx:753 +msgid "Add a user to this list" +msgstr "Додати кориÑтувача до ÑпиÑку" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "Додати обліковий запиÑ" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +#: src/view/com/modals/AltImage.tsx:93 +msgid "Add alt text" +msgstr "Додати альтернативний текÑÑ‚" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "Додайте подробиці" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "Додайте подробиці до Ñкарги" + +#: src/view/com/composer/Composer.tsx:447 +msgid "Add link card" +msgstr "Додати попередній переглÑд" + +#: src/view/com/composer/Composer.tsx:450 +msgid "Add link card:" +msgstr "Додати попередній переглÑд:" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "Додайте наÑтупний DNS-Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ вашого домену:" + +#: src/view/com/profile/ProfileHeader.tsx:353 +msgid "Add to Lists" +msgstr "Додати до ÑпиÑку" + +#: src/view/screens/ProfileFeed.tsx:271 +msgid "Add to my feeds" +msgstr "Додати до моїх Ñтрічок" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "Додано до ÑпиÑку" + +#: src/view/screens/PreferencesHomeFeed.tsx:170 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "Ðалаштуйте мінімальну кількіÑть вподобань Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ щоб відповідь відобразилаÑÑ Ñƒ вашій Ñтрічці." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "ВміÑÑ‚ Ð´Ð»Ñ Ð´Ð¾Ñ€Ð¾Ñлих" + +#: src/view/screens/Settings.tsx:602 +msgid "Advanced" +msgstr "Розширені" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "Ðльтернативний текÑÑ‚" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "Ðльтернативний текÑÑ‚ опиÑує Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½ÐµÐ·Ñ€Ñчих та кориÑтувачів із вадами зору, та надає додатковий контекÑÑ‚ Ð´Ð»Ñ Ð²ÑÑ–Ñ…." + +#: src/view/com/modals/VerifyEmail.tsx:118 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "Було надіÑлано лиÑÑ‚ на адреÑу {0}. Він міÑтить код підтвердженнÑ, Ñкий можна ввеÑти нижче." + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "Було надіÑлано лиÑÑ‚ на вашу попередню адреÑу, {0}. Він міÑтить код підтвердженнÑ, Ñкий ви можете ввеÑти нижче." + +#: src/view/com/notifications/FeedItem.tsx:237 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "та" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "Мова заÑтоÑунку" + +#: src/view/screens/Settings.tsx:622 +msgid "App passwords" +msgstr "Паролі Ð´Ð»Ñ Ð·Ð°ÑтоÑунків" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "Паролі Ð´Ð»Ñ Ð·Ð°ÑтоÑунків" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 +msgid "Appeal content warning" +msgstr "ОÑкаржити Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "ОÑкаржити Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "ОÑкаржити це рішеннÑ" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "ОÑкаржити це рішеннÑ" + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "ОформленнÑ" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "" + +#: src/view/screens/AppPasswords.tsx:223 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "Ви дійÑно хочете видалити пароль Ð´Ð»Ñ Ð·Ð°ÑтоÑунку \"{name}\"?" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Are you sure you'd like to discard this draft?" +msgstr "Ви дійÑно бажаєте видалити цю чернетку?" + +#: src/view/screens/ProfileList.tsx:353 +msgid "Are you sure?" +msgstr "Ви впевнені?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 +msgid "Are you sure? This cannot be undone." +msgstr "Ви впевнені? Це не можна буде ÑкаÑувати." + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "Ð¥ÑƒÐ´Ð¾Ð¶Ð½Ñ Ð°Ð±Ð¾ нееротична оголеніÑть." + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:141 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:254 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:672 +msgid "Back" +msgstr "Ðазад" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "ОÑновні" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +msgid "Birthday" +msgstr "Дата народженнÑ" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "Дата народженнÑ:" + +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 +msgid "Block Account" +msgstr "Заблокувати" + +#: src/view/screens/ProfileList.tsx:523 +msgid "Block accounts" +msgstr "Заблокувати облікові запиÑи" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Block list" +msgstr "Заблокувати ÑпиÑок" + +#: src/view/screens/ProfileList.tsx:308 +msgid "Block these accounts?" +msgstr "Заблокувати ці облікові запиÑи?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "Заблоковані облікові запиÑи" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "Заблоковані облікові запиÑи" + +#: src/view/com/profile/ProfileHeader.tsx:284 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Заблоковані облікові запиÑи не можуть вам відповідати, згадувати Ð²Ð°Ñ Ñƒ Ñвоїх поÑтах, Ñ– взаємодіÑти з вами будь-Ñким іншим чином." + +#: src/view/screens/ModerationBlockedAccounts.tsx:115 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "Заблоковані облікові запиÑи не можуть вам відповідати, згадувати Ð²Ð°Ñ Ñƒ Ñвоїх поÑтах, Ñ– взаємодіÑти з вами будь-Ñким іншим чином. Ви не будете бачити їхні поÑти Ñ– вони не будуть бачити ваші." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "Заблокований поÑÑ‚." + +#: src/view/screens/ProfileList.tsx:310 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ - це відкрита інформаціÑ. Заблоковані кориÑтувачі не можуть відповіÑти у ваших темах, згадувати Ð²Ð°Ñ Ð°Ð±Ð¾ іншим чином взаємодіÑти з вами." + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:93 +msgid "Blog" +msgstr "Блог" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:31 +msgid "Bluesky" +msgstr "Bluesky" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "Bluesky гнучкий." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky відкритий." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky публічний." + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "Bluesky викориÑтовує ÑиÑтему запрошень Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð´Ð¾Ñ€Ð¾Ð²Ñ–ÑˆÐ¾Ñ— Ñпільноти. Якщо Ви не знаєте когоÑÑŒ хто має запрошеннÑ, ви можете запиÑатиÑÑ Ð´Ð¾ черги Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ– ми Ñкоро надішлемо вам код запрошеннÑ." + +#: src/view/screens/Moderation.tsx:225 +msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." +msgstr "Bluesky не буде показувати ваш профіль Ñ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð²Ñ–Ð´ÑƒÐ²Ð°Ñ‡Ð°Ð¼ без облікового запиÑу. Інші заÑтоÑунки можуть не Ñлідувати цьому запиту. Це не робить ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ð¼." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:751 +msgid "Build version {0} {1}" +msgstr "ВерÑÑ–Ñ {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +msgid "Business" +msgstr "ОрганізаціÑ" + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:221 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "Камера" + +#: src/view/com/modals/AddAppPasswords.tsx:214 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "Може міÑтити лише літери, цифри, пробіли, дефіÑи та знаки підкреÑленнÑ, Ñ– мати довжину від 4 до 32 Ñимволів." + +#: src/view/com/composer/Composer.tsx:294 +#: src/view/com/composer/Composer.tsx:297 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/CreateOrEditList.tsx:267 +#: src/view/com/modals/CreateOrEditList.tsx:272 +#: src/view/com/modals/DeleteAccount.tsx:150 +#: src/view/com/modals/DeleteAccount.tsx:223 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:248 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:601 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "СкаÑувати" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу" + +#: src/view/com/modals/AltImage.tsx:123 +#~ msgid "Cancel add image alt text" +#~ msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "СкаÑувати зміну пÑевдоніму" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "СкаÑувати Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "СкаÑувати Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "СкаÑувати Ñ†Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "СкаÑувати пошук" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "СкаÑувати Ð·Ð°Ð¿Ð¸Ñ Ñƒ чергу очікуваннÑ" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "Змінити" + +#: src/view/screens/Settings.tsx:634 +#: src/view/screens/Settings.tsx:643 +msgid "Change handle" +msgstr "Змінити пÑевдонім" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "Змінити пÑевдонім" + +#: src/view/com/modals/VerifyEmail.tsx:141 +msgid "Change my email" +msgstr "Змінити адреÑу електронної пошти" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "Змінити адреÑу електронної пошти" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "ПодивітьÑÑ Ð½Ð° деÑкі з рекомендованих Ñтрічок. ÐатиÑніть +, щоб додати Ñ—Ñ… до Ñвого ÑпиÑку закріплених Ñтрічок." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "ПодивітьÑÑ Ð½Ð° деÑких рекомендованих кориÑтувачів. ПідпишітьÑÑ Ð½Ð° них щоб бачити Ñхожих кориÑтувачів." + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "Пошукайте у вашій поштовій Ñкриньці лиÑÑ‚ із кодом, щоб ввеÑти нижче:" + +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "Виберіть \"УÑÑ–\" або \"Ðіхто\"" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "Оберіть хоÑтинг-провайдера" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "Ðвтори Ñтрічок можуть обирати будь-Ñкі алгоритми Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñтрічки Ñаме Ð´Ð»Ñ Ð²Ð°Ñ." + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:127 +msgid "Choose your password" +msgstr "Вкажіть пароль" + +#: src/view/screens/Settings.tsx:727 +msgid "Clear all legacy storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:729 +msgid "Clear all legacy storage data (restart after this)" +msgstr "" + +#: src/view/screens/Settings.tsx:739 +msgid "Clear all storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:741 +msgid "Clear all storage data (restart after this)" +msgstr "" + +#: src/view/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 +msgid "Clear search query" +msgstr "ОчиÑтити пошуковий запит" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "Закрити ÑповіщеннÑ" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "Закрити нижнє меню" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "Закрити зображеннÑ" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "Закрити переглÑд зображеннÑ" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "Закрити панель навігації" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "Правила Ñпільноти" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "ВідповіÑти" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:225 +#: src/view/screens/PreferencesHomeFeed.tsx:305 +#: src/view/screens/PreferencesThreads.tsx:159 +msgid "Confirm" +msgstr "Підтвердити" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "Підтвердити" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "Підтвердити перелік мов" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "Підтвердити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:176 +#: src/view/com/modals/VerifyEmail.tsx:159 +msgid "Confirmation code" +msgstr "Код підтвердженнÑ" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:273 +msgid "Connecting..." +msgstr "З’єднаннÑ..." + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "Ð¤Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¼Ñ–Ñту" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "Ð¤Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¼Ñ–Ñту" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "Мови" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "Продовжити" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "Скопійовано" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "Скопіювати" + +#: src/view/screens/ProfileList.tsx:385 +msgid "Copy link to list" +msgstr "Скопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ÑпиÑок" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +msgid "Copy link to post" +msgstr "Скопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° поÑÑ‚" + +#: src/view/com/profile/ProfileHeader.tsx:338 +msgid "Copy link to profile" +msgstr "Скопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° профіль" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 +msgid "Copy post text" +msgstr "Скопіювати текÑÑ‚ повідомленнÑ" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "Політика захиÑту авторÑького права" + +#: src/view/screens/ProfileFeed.tsx:95 +msgid "Could not load feed" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñтрічку" + +#: src/view/screens/ProfileList.tsx:839 +msgid "Could not load list" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑпиÑок" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +msgid "Create a new account" +msgstr "Створити новий обліковий запиÑ" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "Create Account" +msgstr "Створити обліковий запиÑ" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "Створити новий обліковий запиÑ" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "Створено: {0}" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "ВлаÑний домен" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:55 +msgid "Customize media from external sites." +msgstr "" + +#: src/view/screens/Settings.tsx:648 +msgid "Danger Zone" +msgstr "Ðебезпечна зона" + +#: src/view/screens/Settings.tsx:411 +#~ msgid "Dark" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:655 +msgid "Delete account" +msgstr "Видалити обліковий запиÑ" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "Видалити обліковий запиÑ" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "Видалити пароль Ð´Ð»Ñ Ð·Ð°ÑтоÑунку" + +#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:412 +msgid "Delete List" +msgstr "Видалити ÑпиÑок" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "Видалити мій обліковий запиÑ" + +#: src/view/screens/Settings.tsx:665 +msgid "Delete my account…" +msgstr "Видалити мій обліковий запиÑ…" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 +msgid "Delete post" +msgstr "Видалити поÑÑ‚" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 +msgid "Delete this post?" +msgstr "Видалити цей поÑÑ‚?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "Видалений поÑÑ‚." + +#: src/view/com/modals/CreateOrEditList.tsx:218 +#: src/view/com/modals/CreateOrEditList.tsx:234 +#: src/view/com/modals/EditProfile.tsx:197 +#: src/view/com/modals/EditProfile.tsx:209 +msgid "Description" +msgstr "ОпиÑ" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "" + +#: src/view/screens/Settings.tsx:670 +msgid "Developer Tools" +msgstr "ІнÑтрументи розробника" + +#: src/view/com/composer/Composer.tsx:211 +msgid "Did you want to say anything?" +msgstr "Порожній поÑÑ‚. Ви хотіли щоÑÑŒ напиÑати?" + +#: src/view/com/composer/Composer.tsx:144 +msgid "Discard" +msgstr "Видалити" + +#: src/view/com/composer/Composer.tsx:138 +msgid "Discard draft" +msgstr "Відкинути чернетку" + +#: src/view/screens/Moderation.tsx:207 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "ПопроÑити заÑтоÑунки не показувати мій обліковий Ð·Ð°Ð¿Ð¸Ñ Ð±ÐµÐ· входу" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "Відкрийте Ð´Ð»Ñ Ñебе нові Ñтрічки" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "Ім'Ñ" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "Ім'Ñ" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "Домен перевірено!" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/Threadgate.tsx:129 +#: src/view/com/modals/Threadgate.tsx:132 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/screens/PreferencesHomeFeed.tsx:308 +#: src/view/screens/PreferencesThreads.tsx:162 +msgid "Done" +msgstr "Готово" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "Готово{extraText}" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "Кожен код Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÑŽÑ” лише один раз. Ð§Ð°Ñ Ð²Ñ–Ð´ чаÑу ви будете отримувати нові коди." + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "Редагувати зображеннÑ" + +#: src/view/screens/ProfileList.tsx:400 +msgid "Edit list details" +msgstr "Редагувати Ð¾Ð¿Ð¸Ñ ÑпиÑку" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "Редагувати мої Ñтрічки" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "Редагувати мій профіль" + +#: src/view/com/profile/ProfileHeader.tsx:453 +msgid "Edit profile" +msgstr "Редагувати профіль" + +#: src/view/com/profile/ProfileHeader.tsx:456 +msgid "Edit Profile" +msgstr "Редагувати профіль" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "Редагувати збережені Ñтрічки" + +#: src/view/com/auth/create/Step2.tsx:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "Ел. пошта" + +#: src/view/com/auth/create/Step2.tsx:99 +msgid "Email address" +msgstr "ÐдреÑа електронної пошти" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "Email оновлено" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "Email:" + +#: src/view/com/modals/EmbedConsent.tsx:113 +msgid "Enable {0} only" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:97 +msgid "Enable External Media" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:144 +msgid "Enable this setting to only see replies between people you follow." +msgstr "Увімкніть цей параметр, щоб бачити відповіді тільки між людьми, на Ñких ви підпиÑані." + +#: src/view/screens/Profile.tsx:426 +msgid "End of feed" +msgstr "Кінець Ñтрічки" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "Введіть адреÑу вашого хоÑтинг-провайдера:" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "Введіть домен, Ñкий ви хочете викориÑтовувати" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "Введіть адреÑу електронної пошти, Ñку ви викориÑтовували Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу. Ми надішлемо вам код підтвердженнÑ, щоб ви могли вÑтановити новий пароль." + +#: src/view/com/auth/create/Step2.tsx:104 +msgid "Enter your email address" +msgstr "Введіть адреÑу електронної пошти" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "Введіть нову адреÑу електронної пошти." + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "Введіть пÑевдонім та пароль" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "Помилка:" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "УÑÑ–" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "Розгорнути альтернативний текÑÑ‚" + +#: src/view/com/modals/EmbedConsent.tsx:64 +msgid "External Media" +msgstr "" + +#: src/view/com/modals/EmbedConsent.tsx:75 +#: src/view/screens/PreferencesExternalEmbeds.tsx:66 +msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." +msgstr "" + +#: src/view/screens/PreferencesExternalEmbeds.tsx:52 +#: src/view/screens/Settings.tsx:595 +msgid "External Media Preferences" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ рекомендації Ñтрічок" + +#: src/view/screens/Feeds.tsx:556 +msgid "Feed offline" +msgstr "Стрічка не працює" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñтрічки" + +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "ÐадіÑлати відгук" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/screens/Profile.tsx:165 +#: src/view/shell/bottom-bar/BottomBar.tsx:181 +#: src/view/shell/desktop/LeftNav.tsx:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "Стрічки" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "Стрічки ÑтворюютьÑÑ ÐºÐ¾Ñ€Ð¸Ñтувачами Ð´Ð»Ñ Ð²Ñ–Ð´Ð±Ð¾Ñ€Ñƒ поÑтів. Оберіть Ñтрічки, що Ð²Ð°Ñ Ñ†Ñ–ÐºÐ°Ð²Ð»Ñть." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "Стрічки - це алгоритми, Ñтворені кориÑтувачами з деÑким доÑвідом програмуваннÑ. <0/> Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації." + +#: src/view/screens/Search/Search.tsx:427 +msgid "Find users on Bluesky" +msgstr "Знайти кориÑтувачів у Bluesky" + +#: src/view/screens/Search/Search.tsx:425 +msgid "Find users with the search tool on the right" +msgstr "Знайти кориÑтувачів за допомогою Ð¿Ð¾Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ñправа вгорі" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "Пошук Ñхожих кориÑтувачів..." + +#: src/view/screens/PreferencesHomeFeed.tsx:108 +msgid "Fine-tune the content you see on your home screen." +msgstr "Оберіть, що ви хочете бачити у Ñвоїй домашній Ñтрічці." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "Ðалаштуйте Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½ÑŒ." + +#: src/view/com/profile/ProfileHeader.tsx:538 +msgid "Follow" +msgstr "ПідпиÑатиÑÑ" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "ПідпишітьÑÑ Ð½Ð° кількох кориÑтувачів щоб почати Ñ—Ñ… читати. Ми зможемо порекомендувати вам більше кориÑтувачів, ÑпираючиÑÑŒ на те хто Ð²Ð°Ñ Ñ†Ñ–ÐºÐ°Ð²Ð¸Ñ‚ÑŒ." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "Ваші підпиÑки" + +#: src/view/screens/PreferencesHomeFeed.tsx:151 +msgid "Followed users only" +msgstr "Тільки ваші підпиÑки" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "ПідпиÑники" + +#: src/view/com/profile/ProfileHeader.tsx:624 +msgid "following" +msgstr "підпиÑок" + +#: src/view/com/profile/ProfileHeader.tsx:522 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "ПідпиÑані" + +#: src/view/com/profile/ProfileHeader.tsx:571 +msgid "Follows you" +msgstr "ПідпиÑаний на ваÑ" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "З міркувань безпеки нам потрібно буде відправити код Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð° вашу електронну адреÑу." + +#: src/view/com/modals/AddAppPasswords.tsx:207 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "З міркувань безпеки цей пароль відображаєтьÑÑ Ð»Ð¸ÑˆÐµ один раз. Якщо ви втратите цей пароль, вам потрібно буде згенерувати новий." + +#: src/view/com/auth/login/LoginForm.tsx:236 +msgid "Forgot" +msgstr "Забули пароль" + +#: src/view/com/auth/login/LoginForm.tsx:233 +msgid "Forgot password" +msgstr "Забули пароль" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "Забули пароль" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "ГалереÑ" + +#: src/view/com/modals/VerifyEmail.tsx:183 +msgid "Get Started" +msgstr "Почати" + +#: src/view/com/auth/LoggedOut.tsx:81 +#: src/view/com/auth/LoggedOut.tsx:82 +#: src/view/com/util/moderation/ScreenHider.tsx:123 +#: src/view/shell/desktop/LeftNav.tsx:104 +msgid "Go back" +msgstr "Ðазад" + +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 +msgid "Go Back" +msgstr "Ðазад" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:283 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "Далі" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "ПÑевдонім" + +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "Довідка" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "Це ваш пароль Ð´Ð»Ñ Ð·Ð°ÑтоÑунків." + +#: src/view/com/notifications/FeedItem.tsx:324 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Приховати" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "Приховати поÑÑ‚" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "Приховати цей поÑÑ‚?" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide user list" +msgstr "Приховати ÑпиÑок кориÑтувачів" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "Хм, при зв'Ñзку з Ñервером Ñтрічки виникла ÑкаÑÑŒ проблема. Будь лаÑка, повідомте про це Ñ—Ñ— влаÑника." + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "Хм, здаєтьÑÑ Ñервер Ñтрічки налаштовано неправильно. Будь лаÑка, повідомте про це Ñ—Ñ— влаÑника." + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "Хм, здаєтьÑÑ Ñервер Ñтрічки зараз не працює. Будь лаÑка, повідомте про це Ñ—Ñ— влаÑника." + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "Хм, Ñервер Ñтрічки надіÑлав нам незрозумілу відповідь. Будь лаÑка, повідомте про це Ñ—Ñ— влаÑника." + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "Хм, ми не можемо знайти цю Ñтрічку. Можливо вона була видалена." + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "Головна" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx:101 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÑŒÐ¾Ñ— Ñтрічки" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "ХоÑтинг-провайдер" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "ÐдреÑа хоÑтинг-провайдера" + +#: src/view/com/modals/VerifyEmail.tsx:208 +msgid "I have a code" +msgstr "У мене Ñ” код" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "Я маю влаÑний домен" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "Якщо не вибрано жодного варіанту - підходить Ð´Ð»Ñ Ð²ÑÑ–Ñ…." + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "Ðльтернативний текÑÑ‚" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:115 +msgid "Invalid username or password" +msgstr "Ðевірне ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або пароль" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "ЗапроÑити" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "ЗапроÑити друга" + +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Invite code" +msgstr "Код запрошеннÑ" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "Код Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð½Ðµ прийнÑто. ПереконайтеÑÑ Ð² його правильноÑті та повторіть Ñпробу." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "Коди запрошеннÑ: {invitesAvailable}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +msgid "Jobs" +msgstr "ВаканÑÑ–Ñ—" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "ПриєднатиÑÑ Ð´Ð¾ черги очікуваннÑ" + +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 +msgid "Join the waitlist." +msgstr "ПриєднатиÑÑ Ð´Ð¾ черги очікуваннÑ." + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "ПриєднатиÑÑ Ð´Ð¾ черги очікуваннÑ" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "Вибір мови" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð²Ð¸" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "Мови" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:104 +msgid "Learn More" +msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:101 +msgid "Learn more about this warning" +msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про це попередженнÑ" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про те, що Ñ” публічним в Bluesky." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "Залиште Ñ—Ñ… уÑÑ– невідміченими, щоб бачити поÑти незалежно від мови." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Ви залишаєте Bluesky" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "Давайте відновимо ваш пароль!" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "ГалереÑ" + +#: src/view/screens/Settings.tsx:405 +#~ msgid "Light" +#~ msgstr "" + +#: src/view/screens/ProfileFeed.tsx:586 +msgid "Like this feed" +msgstr "Вподобати цю Ñтрічку" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "СподобалоÑÑ" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "ВподобаннÑ" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account to logged-out users" +#~ msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "Ðватар ÑпиÑку" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "Ðазва ÑпиÑку" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:379 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "СпиÑки" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "Завантажити більше поÑтів" + +#: src/view/screens/Notifications.tsx:148 +msgid "Load new notifications" +msgstr "Завантажити нові ÑповіщеннÑ" + +#: src/view/com/feeds/FeedPage.tsx:189 +msgid "Load new posts" +msgstr "Завантажити нові поÑти" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "ЗавантаженнÑ..." + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "Локальний Ñервер розробки" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "Logged-out users" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "ВидиміÑть Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів без облікового запиÑу" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "Увійти до облікового запиÑу, Ñкого немає в ÑпиÑку" + +#: src/view/screens/ProfileFeed.tsx:472 +#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +#~ msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "ПереконайтеÑÑ, що це дійÑно той Ñайт, що ви збираєтеÑÑ Ð²Ñ–Ð´Ð²Ñ–Ð´Ð°Ñ‚Ð¸!" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "Медіа" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "згадані кориÑтувачі" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "Згадані кориÑтувачі" + +#: src/view/screens/Search/Search.tsx:537 +msgid "Menu" +msgstr "Меню" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ Ñервера" + +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "МодераціÑ" + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "СпиÑки Ð´Ð»Ñ Ð¼Ð¾Ð´ÐµÑ€Ð°Ñ†Ñ–Ñ—" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "СпиÑки Ð´Ð»Ñ Ð¼Ð¾Ð´ÐµÑ€Ð°Ñ†Ñ–Ñ—" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "Більше Ñтрічок" + +#: src/view/com/profile/ProfileHeader.tsx:548 +#: src/view/screens/ProfileFeed.tsx:361 +#: src/view/screens/ProfileList.tsx:584 +msgid "More options" +msgstr "Додаткові опції" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:82 +msgid "Most-liked replies first" +msgstr "КількіÑтю вподобань" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Ігнорувати обліковий запиÑ" + +#: src/view/screens/ProfileList.tsx:511 +msgid "Mute accounts" +msgstr "Ігнорувати облікові запиÑи" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Mute list" +msgstr "Ігнорувати ÑпиÑок" + +#: src/view/screens/ProfileList.tsx:271 +msgid "Mute these accounts?" +msgstr "Ігнорувати ці облікові запиÑи?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Mute thread" +msgstr "Ігнорувати поÑÑ‚" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "Ігноровані облікові запиÑи" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "Ігноровані облікові запиÑи" + +#: src/view/screens/ModerationMutedAccounts.tsx:115 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "Ігноровані облікові запиÑи автоматично вилучаютьÑÑ Ñ–Ð· вашої Ñтрічки та Ñповіщень. Ð†Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” повніÑтю приватним." + +#: src/view/screens/ProfileList.tsx:273 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Ð†Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” приватним. Ігноровані кориÑтувачі можуть взаємодіÑти з вами, але ви не бачитимете Ñ—Ñ… поÑти Ñ– не отримуватимете від них Ñповіщень." + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "Мій день народженнÑ" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "Мої Ñтрічки" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "Мій профіль" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "Мої збережені Ñтрічки" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "Ім'Ñ" + +#: src/view/com/modals/EmbedConsent.tsx:107 +#: src/view/com/modals/EmbedConsent.tsx:123 +msgid "Never load embeds from {0}" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "Ðіколи не втрачайте доÑтуп до ваших даних та підпиÑників." + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "Ðовий" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "Ðовий поÑÑ‚" + +#: src/view/shell/desktop/LeftNav.tsx:258 +msgid "New Post" +msgstr "Ðовий поÑÑ‚" + +#: src/view/screens/PreferencesThreads.tsx:79 +msgid "Newest replies first" +msgstr "Спочатку найновіші" + +#: src/view/com/auth/create/CreateAccount.tsx:154 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:286 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +msgid "Next" +msgstr "Далі" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "ÐаÑтупне зображеннÑ" + +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:197 +#: src/view/screens/PreferencesHomeFeed.tsx:232 +#: src/view/screens/PreferencesHomeFeed.tsx:269 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "No" +msgstr "ÐÑ–" + +#: src/view/screens/ProfileFeed.tsx:579 +#: src/view/screens/ProfileList.tsx:720 +msgid "No description" +msgstr "ÐžÐ¿Ð¸Ñ Ð²Ñ–Ð´Ñутній" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "Результати відÑутні" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "Ðічого не знайдено за запитом «{query}»" + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "Ðічого не знайдено за запитом «{query}»" + +#: src/view/com/modals/EmbedConsent.tsx:129 +msgid "No thanks" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "Ðіхто" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "Ðе заÑтоÑовно." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:232 +msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." +msgstr "Примітка: Bluesky Ñ” відкритою Ñ– публічною мережею. Цей параметр обмежує видиміÑть вашого вміÑту лише у заÑтоÑунках Ñ– на Ñайті Bluesky, але інші заÑтоÑунки можуть цього не дотримуватиÑÑ. Ваш вміÑÑ‚ вÑе ще може бути показаний відвідувачам без облікового запиÑу іншими заÑтоÑунками Ñ– вебÑайтами." + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "СповіщеннÑ" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "О, ні!" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "Добре" + +#: src/view/screens/PreferencesThreads.tsx:78 +msgid "Oldest replies first" +msgstr "Спочатку найдавніші" + +#: src/view/com/composer/Composer.tsx:363 +msgid "One or more images is missing alt text." +msgstr "Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ або кількох зображень відÑутній альтернативний текÑÑ‚." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "Тільки {0} можуть відповідати." + +#: src/view/com/composer/Composer.tsx:468 +#: src/view/com/composer/Composer.tsx:469 +msgid "Open emoji picker" +msgstr "Емодзі" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "Відкрити навігацію" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "Відкриває Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð²" + +#: src/view/screens/Settings.tsx:587 +msgid "Opens external embeds settings" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "Відкриває ÑпиÑок кодів запрошеннÑ" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "Відкриває діалог Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°Ñного домену Ñк пÑевдоніму" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "Відкриває Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÐµÑ€Ð°Ñ†Ñ–Ñ—" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "Відкриває Ñторінку з уÑіма збереженими Ñтрічками" + +#: src/view/screens/Settings.tsx:614 +msgid "Opens the app password settings page" +msgstr "Відкриває Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ Ð·Ð°ÑтоÑунків" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "Відкриває Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÑŒÐ¾Ñ— Ñтрічки" + +#: src/view/screens/Settings.tsx:697 +msgid "Opens the storybook page" +msgstr "" + +#: src/view/screens/Settings.tsx:677 +msgid "Opens the system log page" +msgstr "Відкриває ÑиÑтемний журнал" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "Відкриває Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº" + +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "Ðбо ÑкіÑÑŒ із наÑтупних варіантів:" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "Інший обліковий запиÑ" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "Інший хоÑтинг-провайдер" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "Інші..." + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "Сторінку не знайдено" + +#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:221 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "Пароль" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "Пароль змінено" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "Пароль змінено!" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ– Ð´Ð»Ñ Ð´Ð¾Ñ€Ð¾Ñлих." + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "Закріплені Ñтрічки" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111 +msgid "Play {0}" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54 +#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55 +msgid "Play Video" +msgstr "" + +#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110 +msgid "Plays the GIF" +msgstr "" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "Будь лаÑка, виберіть пÑевдонім." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "Будь лаÑка, оберіть ваш пароль." + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "Будь лаÑка, підтвердіть вашу електронну пошту, перш ніж змінити Ñ—Ñ—. Це тимчаÑова вимога під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрументів Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти, Ñ– незабаром вона буде видалена." + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "Будь лаÑка, введіть унікальну назву Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ паролю або викориÑтовуйте нашу випадково згенеровану." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "Будь лаÑка, введіть адреÑу ел. пошти." + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "Будь лаÑка, також введіть ваш пароль:" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this content warning was incorrectly applied!" +msgstr "Будь лаÑка, вкажіть чому ви вважаєте що Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вміÑÑ‚ було додано неправильно?" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "" + +#: src/view/com/composer/Composer.tsx:215 +msgid "Please wait for your link card to finish loading" +msgstr "Будь лаÑка, зачекайте доки завершитьÑÑ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду Ð´Ð»Ñ Ð¿Ð¾ÑиланнÑ" + +#: src/view/com/composer/Composer.tsx:346 +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "ПоÑÑ‚" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "ПоÑÑ‚ приховано" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "Мова поÑту" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "Мови поÑту" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "ПоÑÑ‚ не знайдено" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "ПоÑти" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "Потенційно оманливе поÑиланнÑ" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "Попереднє зображеннÑ" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "ОÑновна мова" + +#: src/view/screens/PreferencesThreads.tsx:97 +msgid "Prioritize Your Follows" +msgstr "Пріоритезувати ваші підпиÑки" + +#: src/view/screens/Settings.tsx:570 +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Privacy" +msgstr "КонфіденційніÑть" + +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:783 +#: src/view/shell/Drawer.tsx:262 +msgid "Privacy Policy" +msgstr "Політика конфіденційноÑті" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "Обробка..." + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "Профіль" + +#: src/view/screens/Settings.tsx:841 +msgid "Protect your account by verifying your email." +msgstr "ЗахиÑтіть Ñвій обліковий запиÑ, підтвердивши Ñвою електронну пошту." + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "Публічні, поширювані ÑпиÑки кориÑтувачів Ð´Ð»Ñ Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ блокуваннÑ." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "Публічні ÑпиÑки Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñтрічок." + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "Цитувати поÑÑ‚" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "Цитувати поÑÑ‚" + +#: src/view/screens/PreferencesThreads.tsx:86 +msgid "Random (aka \"Poster's Roulette\")" +msgstr "У випадковому порÑдку" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "Рекомендовані Ñтрічки" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "Рекомендовані кориÑтувачі" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:282 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "Вилучити" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "Вилучити {0} зі збережених Ñтрічок?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "Вилучити обліковий запиÑ" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "Вилучити Ñтрічку" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:271 +msgid "Remove from my feeds" +msgstr "Вилучити з моїх Ñтрічок" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "Вилучити зображеннÑ" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "Вилучити попередній переглÑд зображеннÑ" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "Вилучити цю Ñтрічку з ваших Ñтрічок?" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "Вилучити цю Ñтрічку зі збережених Ñтрічок?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "Вилучено зі ÑпиÑку" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "Відповіді" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "Відповіді до цього поÑту вимкнено" + +#: src/view/screens/PreferencesHomeFeed.tsx:141 +msgid "Reply Filters" +msgstr "Які відповіді показувати" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "ПоÑкаржитиÑÑŒ на {collectionName}" + +#: src/view/com/profile/ProfileHeader.tsx:404 +msgid "Report Account" +msgstr "ПоÑкаржитиÑÑŒ на обліковий запиÑ" + +#: src/view/screens/ProfileFeed.tsx:291 +msgid "Report feed" +msgstr "ПоÑкаржитиÑÑŒ на Ñтрічку" + +#: src/view/screens/ProfileList.tsx:426 +msgid "Report List" +msgstr "ПоÑкаржитиÑÑŒ на ÑпиÑок" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 +msgid "Report post" +msgstr "ПоÑкаржитиÑÑŒ на поÑÑ‚" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "РепоÑÑ‚" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "РепоÑтити або цитувати" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "РепоÑÑ‚" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "Змінити" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:422 +msgid "Require alt text before posting" +msgstr "Вимагати Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ текÑту перед тим Ñк поÑтити зображеннÑ" + +#: src/view/com/auth/create/Step2.tsx:68 +msgid "Required for this provider" +msgstr "ВимагаєтьÑÑ Ñ†Ð¸Ð¼ хоÑтинг-провайдером" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "Код підтвердженнÑ" + +#: src/view/screens/Settings.tsx:719 +msgid "Reset onboarding state" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "Скинути пароль" + +#: src/view/screens/Settings.tsx:709 +msgid "Reset preferences state" +msgstr "" + +#: src/view/screens/Settings.tsx:717 +msgid "Resets the onboarding state" +msgstr "" + +#: src/view/screens/Settings.tsx:707 +msgid "Resets the preferences state" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:163 +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/login/LoginForm.tsx:263 +#: src/view/com/auth/login/LoginForm.tsx:266 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "Повторити Ñпробу" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:249 +#: src/view/com/modals/CreateOrEditList.tsx:257 +#: src/view/com/modals/EditProfile.tsx:223 +msgid "Save" +msgstr "Зберегти" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "Зберегти альтернативний текÑÑ‚" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "Зберегти зміни" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "Зберегти новий пÑевдонім" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "Обрізати зображеннÑ" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "Збережені Ñтрічки" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "Пошук" + +#: src/view/screens/Search/Search.tsx:390 +#~ msgid "Search for posts and users." +#~ msgstr "" + +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +msgid "Search for users" +msgstr "Пошук кориÑтувачів" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "Потрібен код підтвердженнÑ" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "Що далі?" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Вибрати Bluesky Social" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "Вибрати Ñ–Ñнуючий обліковий запиÑ" + +#: src/view/com/auth/login/LoginForm.tsx:147 +msgid "Select service" +msgstr "Вибрати хоÑтинг-провайдера" + +#: src/view/screens/LanguageSettings.tsx:281 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "Оберіть мови поÑтів, Ñкі ви хочете бачити у збережених Ñтрічках. Якщо не вибрано жодної - буде показано поÑти вÑіма мовами." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "Оберіть мову інтерфейÑу" + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "Оберіть бажану мову Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»Ð°Ð´Ñ–Ð² у вашій Ñтрічці." + +#: src/view/com/modals/VerifyEmail.tsx:196 +msgid "Send Confirmation Email" +msgstr "ÐадіÑлати лиÑÑ‚ із кодом підтвердженнÑ" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "ÐадіÑлати ел. лиÑта" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "ÐадіÑлати ел. лиÑта" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "ÐадіÑлати відгук" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "ПоÑкаржитиÑÑŒ" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "Зміна паролÑ" + +#: src/view/screens/PreferencesHomeFeed.tsx:222 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "Вимкніть це налаштуваннÑ, щоб приховати вÑÑ– цитовані поÑти у вашій Ñтрічці. Ðе впливає на репоÑти без цитуваннÑ." + +#: src/view/screens/PreferencesHomeFeed.tsx:119 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "Вимкніть це налаштуваннÑ, щоб приховати вÑÑ– відповіді у вашій Ñтрічці." + +#: src/view/screens/PreferencesHomeFeed.tsx:188 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "Вимкніть це налаштуваннÑ, щоб приховати вÑÑ– репоÑти у вашій Ñтрічці." + +#: src/view/screens/PreferencesThreads.tsx:122 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "Увімкніть це налаштуваннÑ, щоб показувати відповіді у виглÑді гілок. Це екÑпериментальна функціÑ." + +#: src/view/screens/PreferencesHomeFeed.tsx:258 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "Увімкніть це налаштуваннÑ, щоб іноді бачити поÑти зі збережених Ñтрічок у вашій домашній Ñтрічці. Це екÑпериментальна функціÑ." + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "ÐалаштуваннÑ" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "СекÑуальна активніÑть або еротична оголеніÑть." + +#: src/view/com/profile/ProfileHeader.tsx:338 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:385 +msgid "Share" +msgstr "Поширити" + +#: src/view/screens/ProfileFeed.tsx:303 +msgid "Share feed" +msgstr "Поширити Ñтрічку" + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "" + +#: src/view/com/util/moderation/ContentHider.tsx:105 +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "Показати" + +#: src/view/com/util/moderation/ScreenHider.tsx:132 +msgid "Show anyway" +msgstr "Ð’Ñеодно показати" + +#: src/view/com/modals/EmbedConsent.tsx:87 +msgid "Show embeds from {0}" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:255 +msgid "Show Posts from My Feeds" +msgstr "Показувати поÑти зі збережених Ñтрічок" + +#: src/view/screens/PreferencesHomeFeed.tsx:219 +msgid "Show Quote Posts" +msgstr "Показувати цитати" + +#: src/view/screens/PreferencesHomeFeed.tsx:116 +msgid "Show Replies" +msgstr "Показувати відповіді" + +#: src/view/screens/PreferencesThreads.tsx:100 +msgid "Show replies by people you follow before all other replies." +msgstr "Показувати відповіді від людей, за Ñкими ви Ñлідкуєте, вище інших." + +#: src/view/screens/PreferencesHomeFeed.tsx:185 +msgid "Show Reposts" +msgstr "Показувати репоÑти" + +#: src/view/com/notifications/FeedItem.tsx:345 +msgid "Show users" +msgstr "Показати кориÑтувачів" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:70 +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:54 +#: src/view/shell/bottom-bar/BottomBar.tsx:285 +#: src/view/shell/bottom-bar/BottomBar.tsx:286 +#: src/view/shell/bottom-bar/BottomBar.tsx:288 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:177 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:180 +#: src/view/shell/NavSignupCard.tsx:58 +#: src/view/shell/NavSignupCard.tsx:59 +msgid "Sign in" +msgstr "Увійти" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:78 +#: src/view/com/auth/SplashScreen.tsx:57 +#: src/view/com/auth/SplashScreen.web.tsx:87 +msgid "Sign In" +msgstr "Увійти" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "Увійти Ñк {0}" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "Увійти Ñк..." + +#: src/view/com/auth/login/LoginForm.tsx:134 +msgid "Sign into" +msgstr "Увійти до" + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +msgid "Sign out" +msgstr "Вийти" + +#: src/view/shell/bottom-bar/BottomBar.tsx:275 +#: src/view/shell/bottom-bar/BottomBar.tsx:276 +#: src/view/shell/bottom-bar/BottomBar.tsx:278 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:167 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168 +#: src/view/shell/bottom-bar/BottomBarWeb.tsx:170 +#: src/view/shell/NavSignupCard.tsx:49 +#: src/view/shell/NavSignupCard.tsx:50 +#: src/view/shell/NavSignupCard.tsx:52 +msgid "Sign up" +msgstr "ЗареєÑтруватиÑÑ" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "ЗареєÑтруйтеÑÑ Ð°Ð±Ð¾ увійдіть, щоб приєднатиÑÑ Ð´Ð¾ розмови" + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "Ðеобхідно увійти Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "Ви увійшли Ñк" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "ПропуÑтити" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "Сортувати відповіді" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "Сортувати відповіді до поÑтів за:" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "Квадратне" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "" + +#: src/view/screens/Settings.tsx:763 +msgid "Status page" +msgstr "Сторінка Ñтану" + +#: src/view/screens/Settings.tsx:699 +msgid "Storybook" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "ÐадіÑлати" + +#: src/view/screens/ProfileList.tsx:575 +msgid "Subscribe" +msgstr "ПідпиÑатиÑÑ" + +#: src/view/screens/ProfileList.tsx:571 +msgid "Subscribe to this list" +msgstr "ПідпиÑатиÑÑ Ð½Ð° цей ÑпиÑок" + +#: src/view/screens/Search/Search.tsx:362 +msgid "Suggested Follows" +msgstr "Пропоновані підпиÑки" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "Підтримка" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "Перемикнути обліковий запиÑ" + +#: src/view/screens/Settings.tsx:398 +#~ msgid "System" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:679 +msgid "System log" +msgstr "СиÑтемний журнал" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "ВиÑоке" + +#: src/view/shell/desktop/RightNav.tsx:93 +msgid "Terms" +msgstr "Умови" + +#: src/view/screens/Settings.tsx:777 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "Умови ВикориÑтаннÑ" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 +msgid "Text input field" +msgstr "Поле вводу текÑту" + +#: src/view/com/profile/ProfileHeader.tsx:306 +msgid "The account will be able to interact with you after unblocking." +msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ð·Ð¼Ð¾Ð¶Ðµ взаємодіÑти з вами піÑÐ»Ñ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "Правила Спільноти переміщено до <0/>" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "Політику захиÑту авторÑького права переміщено до <0/>" + +#: src/view/com/post-thread/PostThread.tsx:433 +msgid "The post may have been deleted." +msgstr "Можливо цей поÑÑ‚ було видалено." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "Політика конфіденційноÑті була переміщена до <0/>" + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "Форма підтримки була переміщена. Якщо вам потрібна допомога, будь лаÑка, <0/> або відвідайте {HELP_DESK_URL}, щоб зв'ÑзатиÑÑ Ð· нами." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "Умови ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½ÐµÑено до" + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "У заÑтоÑунку ÑталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° проблема. Будь лаÑка, повідомте наÑ, Ñкщо ви отримали це повідомленнÑ!" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +#~ msgid "This {0} has been labeled." +#~ msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "This {screenDescription} has been flagged:" +msgstr "Цей {screenDescription} був позначений:" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +msgid "This account has requested that users sign in to view their profile." +msgstr "Цей кориÑтувач вказав, що не хоче, аби його профіль бачили відвідувачі без облікового запиÑу." + +#: src/view/com/modals/EmbedConsent.tsx:68 +msgid "This content is hosted by {0}. Do you want to enable external media?" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "Цей вміÑÑ‚ не доÑтупний Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду без облікового запиÑу Bluesky." + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "Ð¦Ñ Ñтрічка зараз отримує забагато запитів Ñ– тимчаÑово недоÑтупна. Спробуйте ще раз пізніше." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "Ð¦Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð½Ðµ розкриваєтьÑÑ Ñ–Ð½ÑˆÐ¸Ð¼ кориÑтувачам." + +#: src/view/com/modals/VerifyEmail.tsx:113 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "Це важливо Ð´Ð»Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑƒ, Ñкщо вам коли-небудь потрібно буде змінити адреÑу електронної пошти або відновити пароль." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "Це ÑÐµÑ€Ð²Ñ–Ñ Ñкий зберігає дані вашого облікового запиÑу." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "Це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²ÐµÐ´Ðµ на Ñайт:" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "Цей поÑÑ‚ було видалено." + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "Це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ñтупне тільки Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñів з прикріпленими медіа-файлами." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:178 +msgid "This will hide this post from your feeds." +msgstr "Це приховає цей поÑÑ‚ із вашої Ñтрічки." + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:503 +msgid "Thread Preferences" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº" + +#: src/view/screens/PreferencesThreads.tsx:119 +msgid "Threaded Mode" +msgstr "Режим гілок" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "Розкрити/Ñховати" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "РедагуваннÑ" + +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 +msgid "Translate" +msgstr "ПереклаÑти" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "Спробувати ще раз" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Un-block list" +msgstr "Розблокувати ÑпиÑок" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Un-mute list" +msgstr "ПереÑтати ігнорувати" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:120 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "Ðе вдалоÑÑ Ð·Ð²'ÑзатиÑÑ Ð· вашим хоÑтинг-провайдером. Перевірте ваше Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Інтернету." + +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 +msgid "Unblock" +msgstr "Розблокувати" + +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 +msgid "Unblock Account" +msgstr "Розблокувати обліковий запиÑ" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "СкаÑувати репоÑÑ‚" + +#: src/view/com/auth/create/state.ts:216 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "Ðа жаль, ви не відповідаєте вимогам Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу." + +#: src/view/com/profile/ProfileHeader.tsx:369 +msgid "Unmute Account" +msgstr "ПереÑтати ігнорувати" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Unmute thread" +msgstr "ПереÑтати ігнорувати" + +#: src/view/screens/ProfileList.tsx:441 +msgid "Unpin moderation list" +msgstr "Відкріпити ÑпиÑок модерації" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "Змінити належніÑть {displayName} до ÑпиÑків" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "ДоÑтупне оновленнÑ" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "ОновленнÑ..." + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "Завантажити текÑтовий файл до:" + +#: src/view/screens/AppPasswords.tsx:194 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "ВикориÑтовуйте паролі Ð´Ð»Ñ Ð·Ð°ÑтоÑунків Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ в інших заÑтоÑунках Ð´Ð»Ñ Bluesky. Це дозволить викориÑтовувати Ñ—Ñ…, не надаючи повний доÑтуп до вашого облікового запиÑу Ñ– вашого оÑновного паролÑ." + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "ВикориÑтовувати провайдера за замовчуваннÑм" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "СкориÑтайтеÑÑŒ ним Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ в інші заÑтоÑунки." + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "ВикориÑтано:" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "ПÑевдонім" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "СпиÑки кориÑтувачів" + +#: src/view/com/auth/login/LoginForm.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:192 +msgid "Username or email address" +msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або електронна адреÑа" + +#: src/view/screens/ProfileList.tsx:747 +msgid "Users" +msgstr "КориÑтувачі" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "кориÑтувачі на Ñких підпиÑані <0/>" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +#~ msgid "Users followed by <0/>" +#~ msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "КориÑтувачі в \"{0}\"" + +#: src/view/screens/Settings.tsx:802 +msgid "Verify email" +msgstr "Підтвердити електронну адреÑу" + +#: src/view/screens/Settings.tsx:827 +msgid "Verify my email" +msgstr "Підтвердити мою електронну адреÑу" + +#: src/view/screens/Settings.tsx:836 +msgid "Verify My Email" +msgstr "Підтвердити мою електронну адреÑу" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "Підтвердити нову адреÑу електронної пошти" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "ПереглÑнути Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "ПереглÑнути аватар" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "Відвідати Ñайт" + +#: src/view/com/auth/create/CreateAccount.tsx:122 +msgid "We're so excited to have you join us!" +msgstr "Ми дуже раді, що ви приєдналиÑÑ!" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "" + +#: src/view/screens/Search/Search.tsx:243 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "Даруйте, нам не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ пошук за вашим запитом. Будь лаÑка, Ñпробуйте ще раз через кілька хвилин." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "Ðам дуже прикро! Ми не можемо знайти Ñторінку, Ñку ви шукали." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "ЛаÑкаво проÑимо до <0>Bluesky</0>" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "Яка проблема з {collectionName}?" + +#: src/view/com/auth/SplashScreen.tsx:34 +msgid "What's up?" +msgstr "Як Ñправи?" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "Які мови викориÑтані в цьому поÑті?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "ПоÑти Ñкими мовами ви хочете бачити у алгоритмічних Ñтрічках?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "Хто може відповідати" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +#~ msgid "Who can reply?" +#~ msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "Широке" + +#: src/view/com/composer/Composer.tsx:418 +msgid "Write post" +msgstr "ÐапиÑати поÑÑ‚" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "ÐапиÑати відповідь" + +#: src/view/screens/PreferencesHomeFeed.tsx:126 +#: src/view/screens/PreferencesHomeFeed.tsx:198 +#: src/view/screens/PreferencesHomeFeed.tsx:233 +#: src/view/screens/PreferencesHomeFeed.tsx:268 +#: src/view/screens/PreferencesThreads.tsx:106 +#: src/view/screens/PreferencesThreads.tsx:129 +msgid "Yes" +msgstr "Так" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "Ви можете змінити хоÑтинг-провайдера у будь-Ñкий чаÑ." + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "Тепер ви можете увійти за допомогою нового паролÑ." + +#: src/view/com/modals/InviteCodes.tsx:64 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "У Ð²Ð°Ñ Ñ‰Ðµ немає кодів запрошеннÑ! З чаÑом ми надамо вам декілька." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” закріплених Ñтрічок." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” збережених Ñтрічок!" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” збережених Ñтрічок." + +#: src/view/com/post-thread/PostThread.tsx:381 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "Ви заблокували автора або автор заблокував ваÑ." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” Ñтрічок." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” ÑпиÑків." + +#: src/view/screens/ModerationBlockedAccounts.tsx:132 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "Ви ще не заблокували жодного облікового запиÑу. Щоб заблокувати когоÑÑŒ, перейдіть до Ñ—Ñ… профілю та виберіть опцію \"Заблокувати\" у меню Ñ—Ñ… облікового запиÑу." + +#: src/view/screens/AppPasswords.tsx:86 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "Ви ще не Ñтворили жодного Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð»Ñ Ð·Ð°ÑтоÑунків. Ви можете Ñтворити новий пароль, натиÑнувши кнопку нижче." + +#: src/view/screens/ModerationMutedAccounts.tsx:131 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "Ви ще не ігноруєте жодного облікового запиÑу. Щоб ігнорувати когоÑÑŒ, перейдіть до Ñ—Ñ… профілю та виберіть опцію \"Ігнорувати\" у меню Ñ—Ñ… облікового запиÑу." + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "Ви отримаєте електронний лиÑÑ‚ із кодом підтвердженнÑ. Введіть цей код тут, а потім введіть новий пароль." + +#: src/view/com/auth/create/Step2.tsx:58 +msgid "Your account" +msgstr "Ваш акаунт" + +#: src/view/com/auth/create/Step2.tsx:146 +msgid "Your birth date" +msgstr "Ваша дата народженнÑ" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ адреÑу електронної пошти." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "Вашу електронну адреÑу збережено! Ми Ñкоро зв'ÑжемоÑÑ Ð· вами." + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "Вашу адреÑу електронної пошти було змінено, але ще не підтверджено. Ð”Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ, будь лаÑка, перевірте вашу поштову Ñкриньку за новою адреÑою." + +#: src/view/com/modals/VerifyEmail.tsx:108 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "Ваша електронна пошта ще не підтверджена. Це важливий крок Ð´Ð»Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ вашого облікового запиÑу, Ñкий ми рекомендуємо вам зробити." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "Ваш повний пÑевдонім буде" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "Ваш хоÑтинг-провайдер" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "Ваші коди Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾, Ñкщо ви увійшли за допомогою Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð»Ñ Ð·Ð°ÑтоÑунків" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "Ваші повідомленнÑ, Ð²Ð¿Ð¾Ð´Ð¾Ð±Ð°Ð½Ð½Ñ Ñ– блоки Ñ” публічними. Ð†Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ - приватні." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "Ваш профіль" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +#~ msgstr "" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "Ваш пÑевдонім" diff --git a/src/routes.ts b/src/routes.ts index bb2421987..e58fddd42 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -26,6 +26,7 @@ export const router = new Router({ AppPasswords: '/settings/app-passwords', PreferencesHomeFeed: '/settings/home-feed', PreferencesThreads: '/settings/threads', + PreferencesExternalEmbeds: '/settings/external-embeds', SavedFeeds: '/settings/saved-feeds', Support: '/support', PrivacyPolicy: '/support/privacy', diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx index 81a220d1b..8c32c472a 100644 --- a/src/state/modals/index.tsx +++ b/src/state/modals/index.tsx @@ -6,6 +6,7 @@ import {Image as RNImage} from 'react-native-image-crop-picker' import {ImageModel} from '#/state/models/media/image' import {GalleryModel} from '#/state/models/media/gallery' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' +import {EmbedPlayerSource} from '#/lib/strings/embed-player.ts' import {ThreadgateSetting} from '../queries/threadgate' export interface ConfirmModal { @@ -180,6 +181,12 @@ export interface LinkWarningModal { href: string } +export interface EmbedConsentModal { + name: 'embed-consent' + source: EmbedPlayerSource + onAccept: () => void +} + export type Modal = // Account | AddAppPasswordModal @@ -223,6 +230,7 @@ export type Modal = // Generic | ConfirmModal | LinkWarningModal + | EmbedConsentModal const ModalContext = React.createContext<{ isModalActive: boolean diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index cdb542f5a..334ef1d92 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -109,6 +109,7 @@ export function transform(legacy: Partial<LegacySchema>): Schema { step: legacy.onboarding?.step || defaults.onboarding.step, }, hiddenPosts: defaults.hiddenPosts, + externalEmbeds: defaults.externalEmbeds, } } diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index 27b1f26bd..6a26cedae 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -1,6 +1,8 @@ import {z} from 'zod' import {deviceLocales} from '#/platform/detection' +const externalEmbedOptions = ['show', 'hide'] as const + // only data needed for rendering account page const accountSchema = z.object({ service: z.string(), @@ -30,6 +32,19 @@ export const schema = z.object({ appLanguage: z.string(), }), requireAltTextEnabled: z.boolean(), // should move to server + externalEmbeds: z + .object({ + giphy: z.enum(externalEmbedOptions).optional(), + tenor: z.enum(externalEmbedOptions).optional(), + youtube: z.enum(externalEmbedOptions).optional(), + youtubeShorts: z.enum(externalEmbedOptions).optional(), + twitch: z.enum(externalEmbedOptions).optional(), + vimeo: z.enum(externalEmbedOptions).optional(), + spotify: z.enum(externalEmbedOptions).optional(), + appleMusic: z.enum(externalEmbedOptions).optional(), + soundcloud: z.enum(externalEmbedOptions).optional(), + }) + .optional(), mutedThreads: z.array(z.string()), // should move to server invites: z.object({ copiedInvites: z.array(z.string()), @@ -60,6 +75,7 @@ export const defaults: Schema = { appLanguage: deviceLocales[0] || 'en', }, requireAltTextEnabled: false, + externalEmbeds: {}, mutedThreads: [], invites: { copiedInvites: [], diff --git a/src/state/preferences/external-embeds-prefs.tsx b/src/state/preferences/external-embeds-prefs.tsx new file mode 100644 index 000000000..0f6385fe8 --- /dev/null +++ b/src/state/preferences/external-embeds-prefs.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import * as persisted from '#/state/persisted' +import {EmbedPlayerSource} from 'lib/strings/embed-player' + +type StateContext = persisted.Schema['externalEmbeds'] +type SetContext = (source: EmbedPlayerSource, value: 'show' | 'hide') => void + +const stateContext = React.createContext<StateContext>( + persisted.defaults.externalEmbeds, +) +const setContext = React.createContext<SetContext>({} as SetContext) + +export function Provider({children}: React.PropsWithChildren<{}>) { + const [state, setState] = React.useState(persisted.get('externalEmbeds')) + + const setStateWrapped = React.useCallback( + (source: EmbedPlayerSource, value: 'show' | 'hide') => { + setState(prev => { + persisted.write('externalEmbeds', { + ...prev, + [source]: value, + }) + + return { + ...prev, + [source]: value, + } + }) + }, + [setState], + ) + + React.useEffect(() => { + return persisted.onUpdate(() => { + setState(persisted.get('externalEmbeds')) + }) + }, [setStateWrapped]) + + return ( + <stateContext.Provider value={state}> + <setContext.Provider value={setStateWrapped}> + {children} + </setContext.Provider> + </stateContext.Provider> + ) +} + +export function useExternalEmbedsPrefs() { + return React.useContext(stateContext) +} + +export function useSetExternalEmbedPref() { + return React.useContext(setContext) +} diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index 5ec659031..cc2d9244c 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -2,19 +2,26 @@ import React from 'react' import {Provider as LanguagesProvider} from './languages' import {Provider as AltTextRequiredProvider} from '../preferences/alt-text-required' import {Provider as HiddenPostsProvider} from '../preferences/hidden-posts' +import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs' export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export { useRequireAltTextEnabled, useSetRequireAltTextEnabled, } from './alt-text-required' +export { + useExternalEmbedsPrefs, + useSetExternalEmbedPref, +} from './external-embeds-prefs' export * from './hidden-posts' export function Provider({children}: React.PropsWithChildren<{}>) { return ( <LanguagesProvider> <AltTextRequiredProvider> - <HiddenPostsProvider>{children}</HiddenPostsProvider> + <ExternalEmbedsProvider> + <HiddenPostsProvider>{children}</HiddenPostsProvider> + </ExternalEmbedsProvider> </AltTextRequiredProvider> </LanguagesProvider> ) diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts index 785e29765..ba9f97004 100644 --- a/src/state/queries/actor-autocomplete.ts +++ b/src/state/queries/actor-autocomplete.ts @@ -24,6 +24,8 @@ export function useActorAutocompleteQuery(prefix: string) { const {data: follows, isFetching} = useMyFollowsQuery() const moderationOpts = useModerationOpts() + prefix = prefix.toLowerCase() + return useQuery<AppBskyActorDefs.ProfileViewBasic[]>({ staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(prefix || ''), diff --git a/src/state/queries/app-passwords.ts b/src/state/queries/app-passwords.ts index 4b9e09a8d..014244f01 100644 --- a/src/state/queries/app-passwords.ts +++ b/src/state/queries/app-passwords.ts @@ -9,7 +9,6 @@ export const RQKEY = () => ['app-passwords'] export function useAppPasswordsQuery() { return useQuery({ staleTime: STALE.MINUTES.FIVE, - refetchInterval: STALE.MINUTES.ONE, queryKey: RQKEY(), queryFn: async () => { const res = await getAgent().com.atproto.server.listAppPasswords({}) diff --git a/src/state/queries/invites.ts b/src/state/queries/invites.ts index bfea402e1..9ae9c707f 100644 --- a/src/state/queries/invites.ts +++ b/src/state/queries/invites.ts @@ -16,7 +16,6 @@ export type InviteCodesQueryResponse = Exclude< export function useInviteCodesQuery() { return useQuery({ staleTime: STALE.MINUTES.FIVE, - refetchInterval: STALE.MINUTES.FIVE, queryKey: ['inviteCodes'], queryFn: async () => { const res = await getAgent() diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx index abaabbf0e..d604e8fe0 100644 --- a/src/state/queries/notifications/unread.tsx +++ b/src/state/queries/notifications/unread.tsx @@ -15,6 +15,7 @@ import {useMutedThreads} from '#/state/muted-threads' import {RQKEY as RQKEY_NOTIFS} from './feed' import {logger} from '#/logger' import {truncateAndInvalidate} from '../util' +import {AppState} from 'react-native' const UPDATE_INTERVAL = 30 * 1e3 // 30sec @@ -97,6 +98,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { async checkUnread({invalidate}: {invalidate?: boolean} = {}) { try { if (!getAgent().session) return + if (AppState.currentState !== 'active') { + return + } // count const page = await fetchPage({ diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 0e943622a..dbb729133 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -1,4 +1,5 @@ import React, {useCallback, useEffect, useRef} from 'react' +import {AppState} from 'react-native' import {AppBskyFeedDefs, AppBskyFeedPost, PostModeration} from '@atproto/api' import { useInfiniteQuery, @@ -312,6 +313,9 @@ export async function pollLatest(page: FeedPage | undefined) { if (!page) { return false } + if (AppState.currentState !== 'active') { + return + } logger.debug('usePostFeedQuery: pollLatest') const post = await page.api.peekLatest() diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index aa8c94ebc..17f25570e 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -102,10 +102,21 @@ function createPersistSessionHandler( expired: boolean refreshedAccount: SessionAccount }) => void, + { + networkErrorCallback, + }: { + networkErrorCallback?: () => void + } = {}, ): AtpPersistSessionHandler { return function persistSession(event, session) { const expired = event === 'expired' || event === 'create-failed' + if (event === 'network-error') { + logger.warn(`session: persistSessionHandler received network-error event`) + networkErrorCallback?.() + return + } + const refreshedAccount: SessionAccount = { service: account.service, did: session?.did || account.did, @@ -179,16 +190,26 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setStateAndPersist], ) + const clearCurrentAccount = React.useCallback(() => { + logger.debug( + `session: clear current account`, + {}, + logger.DebugContext.session, + ) + __globalAgent = PUBLIC_BSKY_AGENT + queryClient.clear() + setStateAndPersist(s => ({ + ...s, + currentAccount: undefined, + })) + }, [setStateAndPersist, queryClient]) + const createAccount = React.useCallback<ApiContext['createAccount']>( async ({service, email, password, handle, inviteCode}: any) => { - logger.debug( - `session: creating account`, - { - service, - handle, - }, - logger.DebugContext.session, - ) + logger.info(`session: creating account`, { + service, + handle, + }) track('Try Create Account') const agent = new BskyAgent({service}) @@ -215,9 +236,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } agent.setPersistSessionHandler( - createPersistSessionHandler(account, ({expired, refreshedAccount}) => { - upsertAccount(refreshedAccount, expired) - }), + createPersistSessionHandler( + account, + ({expired, refreshedAccount}) => { + upsertAccount(refreshedAccount, expired) + }, + {networkErrorCallback: clearCurrentAccount}, + ), ) __globalAgent = agent @@ -234,7 +259,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { ) track('Create Account') }, - [upsertAccount, queryClient], + [upsertAccount, queryClient, clearCurrentAccount], ) const login = React.useCallback<ApiContext['login']>( @@ -267,9 +292,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } agent.setPersistSessionHandler( - createPersistSessionHandler(account, ({expired, refreshedAccount}) => { - upsertAccount(refreshedAccount, expired) - }), + createPersistSessionHandler( + account, + ({expired, refreshedAccount}) => { + upsertAccount(refreshedAccount, expired) + }, + {networkErrorCallback: clearCurrentAccount}, + ), ) __globalAgent = agent @@ -287,23 +316,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { track('Sign In', {resumedSession: false}) }, - [upsertAccount, queryClient], + [upsertAccount, queryClient, clearCurrentAccount], ) - const clearCurrentAccount = React.useCallback(() => { - logger.debug( - `session: clear current account`, - {}, - logger.DebugContext.session, - ) - __globalAgent = PUBLIC_BSKY_AGENT - queryClient.clear() - setStateAndPersist(s => ({ - ...s, - currentAccount: undefined, - })) - }, [setStateAndPersist, queryClient]) - const logout = React.useCallback<ApiContext['logout']>(async () => { clearCurrentAccount() logger.debug(`session: logout`, {}, logger.DebugContext.session) @@ -337,6 +352,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { ({expired, refreshedAccount}) => { upsertAccount(refreshedAccount, expired) }, + {networkErrorCallback: clearCurrentAccount}, ), }) @@ -437,7 +453,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } } }, - [upsertAccount, queryClient], + [upsertAccount, queryClient, clearCurrentAccount], ) const resumeSession = React.useCallback<ApiContext['resumeSession']>( diff --git a/src/state/shell/composer.tsx b/src/state/shell/composer.tsx index bdf5e4a7a..9cf8ef8de 100644 --- a/src/state/shell/composer.tsx +++ b/src/state/shell/composer.tsx @@ -30,6 +30,7 @@ export interface ComposerOpts { onPost?: () => void quote?: ComposerOptsQuote mention?: string // handle of user to mention + openPicker?: (pos: DOMRect | undefined) => void } type StateContext = ComposerOpts | undefined diff --git a/src/view/com/Button.tsx b/src/view/com/Button.tsx new file mode 100644 index 000000000..d1f70d4ae --- /dev/null +++ b/src/view/com/Button.tsx @@ -0,0 +1,204 @@ +import React from 'react' +import {Pressable, Text, PressableProps, TextProps} from 'react-native' +import * as tokens from '#/alf/tokens' +import {atoms} from '#/alf' + +export type ButtonType = + | 'primary' + | 'secondary' + | 'tertiary' + | 'positive' + | 'negative' +export type ButtonSize = 'small' | 'large' + +export type VariantProps = { + type?: ButtonType + size?: ButtonSize +} +type ButtonState = { + pressed: boolean + hovered: boolean + focused: boolean +} +export type ButtonProps = Omit<PressableProps, 'children'> & + VariantProps & { + children: + | ((props: { + state: ButtonState + type?: ButtonType + size?: ButtonSize + }) => React.ReactNode) + | React.ReactNode + | string + } +export type ButtonTextProps = TextProps & VariantProps + +export function Button({children, style, type, size, ...rest}: ButtonProps) { + const {baseStyles, hoverStyles} = React.useMemo(() => { + const baseStyles = [] + const hoverStyles = [] + + switch (type) { + case 'primary': + baseStyles.push({ + backgroundColor: tokens.color.blue_500, + }) + break + case 'secondary': + baseStyles.push({ + backgroundColor: tokens.color.gray_200, + }) + hoverStyles.push({ + backgroundColor: tokens.color.gray_100, + }) + break + default: + } + + switch (size) { + case 'large': + baseStyles.push( + atoms.py_md, + atoms.px_xl, + atoms.rounded_md, + atoms.gap_sm, + ) + break + case 'small': + baseStyles.push( + atoms.py_sm, + atoms.px_md, + atoms.rounded_sm, + atoms.gap_xs, + ) + break + default: + } + + return { + baseStyles, + hoverStyles, + } + }, [type, size]) + + const [state, setState] = React.useState({ + pressed: false, + hovered: false, + focused: false, + }) + + const onPressIn = React.useCallback(() => { + setState(s => ({ + ...s, + pressed: true, + })) + }, [setState]) + const onPressOut = React.useCallback(() => { + setState(s => ({ + ...s, + pressed: false, + })) + }, [setState]) + const onHoverIn = React.useCallback(() => { + setState(s => ({ + ...s, + hovered: true, + })) + }, [setState]) + const onHoverOut = React.useCallback(() => { + setState(s => ({ + ...s, + hovered: false, + })) + }, [setState]) + const onFocus = React.useCallback(() => { + setState(s => ({ + ...s, + focused: true, + })) + }, [setState]) + const onBlur = React.useCallback(() => { + setState(s => ({ + ...s, + focused: false, + })) + }, [setState]) + + return ( + <Pressable + {...rest} + style={state => [ + atoms.flex_row, + atoms.align_center, + ...baseStyles, + ...(state.hovered ? hoverStyles : []), + typeof style === 'function' ? style(state) : style, + ]} + onPressIn={onPressIn} + onPressOut={onPressOut} + onHoverIn={onHoverIn} + onHoverOut={onHoverOut} + onFocus={onFocus} + onBlur={onBlur}> + {typeof children === 'string' ? ( + <ButtonText type={type} size={size}> + {children} + </ButtonText> + ) : typeof children === 'function' ? ( + children({state, type, size}) + ) : ( + children + )} + </Pressable> + ) +} + +export function ButtonText({ + children, + style, + type, + size, + ...rest +}: ButtonTextProps) { + const textStyles = React.useMemo(() => { + const base = [] + + switch (type) { + case 'primary': + base.push({color: tokens.color.white}) + break + case 'secondary': + base.push({ + color: tokens.color.gray_700, + }) + break + default: + } + + switch (size) { + case 'small': + base.push(atoms.text_sm, {paddingBottom: 1}) + break + case 'large': + base.push(atoms.text_md, {paddingBottom: 1}) + break + default: + } + + return base + }, [type, size]) + + return ( + <Text + {...rest} + style={[ + atoms.flex_1, + atoms.font_semibold, + atoms.text_center, + ...textStyles, + style, + ]}> + {children} + </Text> + ) +} diff --git a/src/view/com/Typography.tsx b/src/view/com/Typography.tsx new file mode 100644 index 000000000..6579c2e51 --- /dev/null +++ b/src/view/com/Typography.tsx @@ -0,0 +1,104 @@ +import React from 'react' +import {Text as RNText, TextProps} from 'react-native' +import {useTheme, atoms, web} from '#/alf' + +export function Text({style, ...rest}: TextProps) { + const t = useTheme() + return <RNText style={[atoms.text_sm, t.atoms.text, style]} {...rest} /> +} + +export function H1({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 1, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_xl, atoms.font_bold, t.atoms.text, style]} + /> + ) +} + +export function H2({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 2, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_lg, atoms.font_bold, t.atoms.text, style]} + /> + ) +} + +export function H3({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 3, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_md, atoms.font_bold, t.atoms.text, style]} + /> + ) +} + +export function H4({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 4, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_sm, atoms.font_bold, t.atoms.text, style]} + /> + ) +} + +export function H5({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 5, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_xs, atoms.font_bold, t.atoms.text, style]} + /> + ) +} + +export function H6({style, ...rest}: TextProps) { + const t = useTheme() + const attr = + web({ + role: 'heading', + 'aria-level': 6, + }) || {} + return ( + <RNText + {...attr} + {...rest} + style={[atoms.text_xxs, atoms.font_bold, t.atoms.text, style]} + /> + ) +} diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts index a77d2a44f..62a8495b3 100644 --- a/src/view/com/auth/create/state.ts +++ b/src/view/com/auth/create/state.ts @@ -136,7 +136,13 @@ export async function submit({ msg`Invite code not accepted. Check that you input it correctly and try again.`, ) } - logger.error('Failed to create account', {error: e}) + + if ([400, 429].includes(e.status)) { + logger.warn('Failed to create account', {error: e}) + } else { + logger.error(`Failed to create account (${e.status} status)`, {error: e}) + } + uiDispatch({type: 'set-processing', value: false}) uiDispatch({type: 'set-error', value: cleanError(errMsg)}) throw e diff --git a/src/view/com/auth/login/LoginForm.tsx b/src/view/com/auth/login/LoginForm.tsx index 727a0e945..98c5eb374 100644 --- a/src/view/com/auth/login/LoginForm.tsx +++ b/src/view/com/auth/login/LoginForm.tsx @@ -107,17 +107,21 @@ export const LoginForm = ({ }) } catch (e: any) { const errMsg = e.toString() - logger.warn('Failed to login', {error: e}) setIsProcessing(false) if (errMsg.includes('Authentication Required')) { + logger.info('Failed to login due to invalid credentials', { + error: errMsg, + }) setError(_(msg`Invalid username or password`)) } else if (isNetworkError(e)) { + logger.warn('Failed to login due to network error', {error: errMsg}) setError( _( msg`Unable to contact your service. Please check your Internet connection.`, ), ) } else { + logger.warn('Failed to login', {error: errMsg}) setError(cleanError(errMsg)) } } diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index 9f60923d6..b15afe6f0 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -6,6 +6,7 @@ import { Keyboard, KeyboardAvoidingView, Platform, + Pressable, ScrollView, StyleSheet, TouchableOpacity, @@ -46,7 +47,6 @@ import {Gallery} from './photos/Gallery' import {MAX_GRAPHEME_LENGTH} from 'lib/constants' import {LabelsBtn} from './labels/LabelsBtn' import {SelectLangBtn} from './select-language/SelectLangBtn' -import {EmojiPickerButton} from './text-input/web/EmojiPicker.web' import {insertMentionAt} from 'lib/strings/mention-manip' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -70,6 +70,7 @@ export const ComposePost = observer(function ComposePost({ onPost, quote: initQuote, mention: initMention, + openPicker, }: Props) { const {currentAccount} = useSession() const {data: currentProfile} = useProfileQuery({did: currentAccount!.did}) @@ -274,6 +275,10 @@ export const ComposePost = observer(function ComposePost({ const canSelectImages = useMemo(() => gallery.size < 4, [gallery.size]) const hasMedia = gallery.size > 0 || Boolean(extLink) + const onEmojiButtonPress = useCallback(() => { + openPicker?.(textInput.current?.getCursorPosition()) + }, [openPicker]) + return ( <KeyboardAvoidingView testID="composePostView" @@ -456,7 +461,19 @@ export const ComposePost = observer(function ComposePost({ <OpenCameraBtn gallery={gallery} /> </> ) : null} - {!isMobile ? <EmojiPickerButton /> : null} + {!isMobile ? ( + <Pressable + onPress={onEmojiButtonPress} + accessibilityRole="button" + accessibilityLabel={_(msg`Open emoji picker`)} + accessibilityHint={_(msg`Open emoji picker`)}> + <FontAwesomeIcon + icon={['far', 'face-smile']} + color={pal.colors.link} + size={22} + /> + </Pressable> + ) : null} <View style={s.flex1} /> <SelectLangBtn /> <CharProgress count={graphemeLength} /> diff --git a/src/view/com/composer/text-input/TextInput.tsx b/src/view/com/composer/text-input/TextInput.tsx index 7e39f6aed..57bfd0a88 100644 --- a/src/view/com/composer/text-input/TextInput.tsx +++ b/src/view/com/composer/text-input/TextInput.tsx @@ -32,6 +32,7 @@ import {POST_IMG_MAX} from 'lib/constants' export interface TextInputRef { focus: () => void blur: () => void + getCursorPosition: () => DOMRect | undefined } interface TextInputProps extends ComponentProps<typeof RNTextInput> { @@ -74,6 +75,7 @@ export const TextInput = forwardRef(function TextInputImpl( blur: () => { textInput.current?.blur() }, + getCursorPosition: () => undefined, // Not implemented on native })) const onChangeText = useCallback( diff --git a/src/view/com/composer/text-input/TextInput.web.tsx b/src/view/com/composer/text-input/TextInput.web.tsx index 206a3205b..ec3a042a3 100644 --- a/src/view/com/composer/text-input/TextInput.web.tsx +++ b/src/view/com/composer/text-input/TextInput.web.tsx @@ -22,6 +22,7 @@ import {useActorAutocompleteFn} from '#/state/queries/actor-autocomplete' export interface TextInputRef { focus: () => void blur: () => void + getCursorPosition: () => DOMRect | undefined } interface TextInputProps { @@ -169,6 +170,10 @@ export const TextInput = React.forwardRef(function TextInputImpl( React.useImperativeHandle(ref, () => ({ focus: () => {}, // TODO blur: () => {}, // TODO + getCursorPosition: () => { + const pos = editor?.state.selection.$anchor.pos + return pos ? editor?.view.coordsAtPos(pos) : undefined + }, })) return ( diff --git a/src/view/com/composer/text-input/web/EmojiPicker.web.tsx b/src/view/com/composer/text-input/web/EmojiPicker.web.tsx index f4b2d99b0..6d16403ff 100644 --- a/src/view/com/composer/text-input/web/EmojiPicker.web.tsx +++ b/src/view/com/composer/text-input/web/EmojiPicker.web.tsx @@ -1,11 +1,17 @@ import React from 'react' import Picker from '@emoji-mart/react' -import {StyleSheet, TouchableWithoutFeedback, View} from 'react-native' -import * as DropdownMenu from '@radix-ui/react-dropdown-menu' +import { + StyleSheet, + TouchableWithoutFeedback, + useWindowDimensions, + View, +} from 'react-native' import {textInputWebEmitter} from '../TextInput.web' -import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' -import {usePalette} from 'lib/hooks/usePalette' -import {useMediaQuery} from 'react-responsive' + +const HEIGHT_OFFSET = 40 +const WIDTH_OFFSET = 100 +const PICKER_HEIGHT = 435 + HEIGHT_OFFSET +const PICKER_WIDTH = 350 + WIDTH_OFFSET export type Emoji = { aliases?: string[] @@ -18,59 +24,87 @@ export type Emoji = { unified: string } -export function EmojiPickerButton() { - const pal = usePalette('default') - const [open, setOpen] = React.useState(false) - const onOpenChange = (o: boolean) => { - setOpen(o) - } - const close = () => { - setOpen(false) - } +export interface EmojiPickerState { + isOpen: boolean + pos: {top: number; left: number; right: number; bottom: number} +} - return ( - <DropdownMenu.Root open={open} onOpenChange={onOpenChange}> - <DropdownMenu.Trigger style={styles.trigger}> - <FontAwesomeIcon - icon={['far', 'face-smile']} - color={pal.colors.link} - size={22} - /> - </DropdownMenu.Trigger> - - <DropdownMenu.Portal> - <EmojiPicker close={close} /> - </DropdownMenu.Portal> - </DropdownMenu.Root> - ) +interface IProps { + state: EmojiPickerState + close: () => void } -export function EmojiPicker({close}: {close: () => void}) { +export function EmojiPicker({state, close}: IProps) { + const {height, width} = useWindowDimensions() + + const isShiftDown = React.useRef(false) + + const position = React.useMemo(() => { + const fitsBelow = state.pos.top + PICKER_HEIGHT < height + const fitsAbove = PICKER_HEIGHT < state.pos.top + const placeOnLeft = PICKER_WIDTH < state.pos.left + const screenYMiddle = height / 2 - PICKER_HEIGHT / 2 + + if (fitsBelow) { + return { + top: state.pos.top + HEIGHT_OFFSET, + } + } else if (fitsAbove) { + return { + bottom: height - state.pos.bottom + HEIGHT_OFFSET, + } + } else { + return { + top: screenYMiddle, + left: placeOnLeft ? state.pos.left - PICKER_WIDTH : undefined, + right: !placeOnLeft + ? width - state.pos.right - PICKER_WIDTH + : undefined, + } + } + }, [state.pos, height, width]) + + React.useEffect(() => { + if (!state.isOpen) return + + const onKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Shift') { + isShiftDown.current = true + } + } + const onKeyUp = (e: KeyboardEvent) => { + if (e.key === 'Shift') { + isShiftDown.current = false + } + } + window.addEventListener('keydown', onKeyDown, true) + window.addEventListener('keyup', onKeyUp, true) + + return () => { + window.removeEventListener('keydown', onKeyDown, true) + window.removeEventListener('keyup', onKeyUp, true) + } + }, [state.isOpen]) + const onInsert = (emoji: Emoji) => { textInputWebEmitter.emit('emoji-inserted', emoji) - close() + + if (!isShiftDown.current) { + close() + } } - const reducedPadding = useMediaQuery({query: '(max-height: 750px)'}) - const noPadding = useMediaQuery({query: '(max-height: 550px)'}) - const noPicker = useMediaQuery({query: '(max-height: 350px)'}) + + if (!state.isOpen) return null return ( - // eslint-disable-next-line react-native-a11y/has-valid-accessibility-descriptors - <TouchableWithoutFeedback onPress={close} accessibilityViewIsModal> + <TouchableWithoutFeedback + accessibilityRole="button" + onPress={close} + accessibilityViewIsModal> <View style={styles.mask}> {/* eslint-disable-next-line react-native-a11y/has-valid-accessibility-descriptors */} - <TouchableWithoutFeedback - onPress={e => { - e.stopPropagation() // prevent event from bubbling up to the mask - }}> - <View - style={[ - styles.picker, - { - paddingTop: noPadding ? 0 : reducedPadding ? 150 : 325, - display: noPicker ? 'none' : 'flex', - }, - ]}> + <TouchableWithoutFeedback onPress={e => e.stopPropagation()}> + <View style={[{position: 'absolute'}, position]}> <Picker data={async () => { return (await import('./EmojiPickerData.json')).default @@ -93,15 +127,7 @@ const styles = StyleSheet.create({ right: 0, width: '100%', height: '100%', - }, - trigger: { - backgroundColor: 'transparent', - // @ts-ignore web only -prf - border: 'none', - paddingTop: 4, - paddingLeft: 12, - paddingRight: 12, - cursor: 'pointer', + alignItems: 'center', }, picker: { marginHorizontal: 'auto', diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx index 99e2b474f..338ffc3d0 100644 --- a/src/view/com/feeds/FeedSourceCard.tsx +++ b/src/view/com/feeds/FeedSourceCard.tsx @@ -229,7 +229,7 @@ export function FeedSourceCardLoaded({ </View> {showSaveBtn && feed.type === 'feed' && ( - <View> + <View style={[s.justifyCenter]}> <Pressable testID={`feed-${feed.displayName}-toggleSave`} disabled={isSavePending || isPinPending || isRemovePending} diff --git a/src/view/com/modals/AltImage.tsx b/src/view/com/modals/AltImage.tsx index a2e918317..5156511d6 100644 --- a/src/view/com/modals/AltImage.tsx +++ b/src/view/com/modals/AltImage.tsx @@ -1,14 +1,12 @@ import React, {useMemo, useCallback, useState} from 'react' import { ImageStyle, - KeyboardAvoidingView, - ScrollView, StyleSheet, - TextInput, TouchableOpacity, View, useWindowDimensions, } from 'react-native' +import {ScrollView, TextInput} from './util' import {Image} from 'expo-image' import {usePalette} from 'lib/hooks/usePalette' import {gradients, s} from 'lib/styles' @@ -17,13 +15,13 @@ import {MAX_ALT_TEXT} from 'lib/constants' import {useTheme} from 'lib/ThemeContext' import {Text} from '../util/text/Text' import LinearGradient from 'react-native-linear-gradient' -import {isAndroid, isWeb} from 'platform/detection' +import {isWeb} from 'platform/detection' import {ImageModel} from 'state/models/media/image' import {useLingui} from '@lingui/react' import {Trans, msg} from '@lingui/macro' import {useModalControls} from '#/state/modals' -export const snapPoints = ['fullscreen'] +export const snapPoints = ['100%'] interface Props { image: ImageModel @@ -54,102 +52,86 @@ export function Component({image}: Props) { } }, [image, windim]) + const onUpdate = useCallback( + (v: string) => { + v = enforceLen(v, MAX_ALT_TEXT) + setAltText(v) + image.setAltText(v) + }, + [setAltText, image], + ) + const onPressSave = useCallback(() => { image.setAltText(altText) closeModal() }, [closeModal, image, altText]) - const onPressCancel = () => { - closeModal() - } - return ( - <KeyboardAvoidingView - behavior={isAndroid ? 'height' : 'padding'} - style={[pal.view, styles.container]}> - <ScrollView - testID="altTextImageModal" - style={styles.scrollContainer} - keyboardShouldPersistTaps="always" - nativeID="imageAltText"> - <View style={styles.scrollInner}> - <View style={[pal.viewLight, styles.imageContainer]}> - <Image - testID="selectedPhotoImage" - style={imageStyles} - source={{ - uri: image.cropped?.path ?? image.path, - }} - contentFit="contain" - accessible={true} - accessibilityIgnoresInvertColors - /> - </View> - <TextInput - testID="altTextImageInput" - style={[styles.textArea, pal.border, pal.text]} - keyboardAppearance={theme.colorScheme} - multiline - placeholder="Add alt text" - placeholderTextColor={pal.colors.textLight} - value={altText} - onChangeText={text => setAltText(enforceLen(text, MAX_ALT_TEXT))} - accessibilityLabel={_(msg`Image alt text`)} - accessibilityHint="" - accessibilityLabelledBy="imageAltText" - autoFocus + <ScrollView + testID="altTextImageModal" + style={[pal.view, styles.scrollContainer]} + keyboardShouldPersistTaps="always" + nativeID="imageAltText"> + <View style={styles.scrollInner}> + <View style={[pal.viewLight, styles.imageContainer]}> + <Image + testID="selectedPhotoImage" + style={imageStyles} + source={{ + uri: image.cropped?.path ?? image.path, + }} + contentFit="contain" + accessible={true} + accessibilityIgnoresInvertColors /> - <View style={styles.buttonControls}> - <TouchableOpacity - testID="altTextImageSaveBtn" - onPress={onPressSave} - accessibilityLabel={_(msg`Save alt text`)} - accessibilityHint={`Saves alt text, which reads: ${altText}`} - accessibilityRole="button"> - <LinearGradient - colors={[gradients.blueLight.start, gradients.blueLight.end]} - start={{x: 0, y: 0}} - end={{x: 1, y: 1}} - style={[styles.button]}> - <Text type="button-lg" style={[s.white, s.bold]}> - <Trans>Save</Trans> - </Text> - </LinearGradient> - </TouchableOpacity> - <TouchableOpacity - testID="altTextImageCancelBtn" - onPress={onPressCancel} - accessibilityRole="button" - accessibilityLabel={_(msg`Cancel add image alt text`)} - accessibilityHint="" - onAccessibilityEscape={onPressCancel}> - <View style={[styles.button]}> - <Text type="button-lg" style={[pal.textLight]}> - <Trans>Cancel</Trans> - </Text> - </View> - </TouchableOpacity> - </View> </View> - </ScrollView> - </KeyboardAvoidingView> + <TextInput + testID="altTextImageInput" + style={[styles.textArea, pal.border, pal.text]} + keyboardAppearance={theme.colorScheme} + multiline + placeholder={_(msg`Add alt text`)} + placeholderTextColor={pal.colors.textLight} + value={altText} + onChangeText={onUpdate} + accessibilityLabel={_(msg`Image alt text`)} + accessibilityHint="" + accessibilityLabelledBy="imageAltText" + autoFocus + /> + <View style={styles.buttonControls}> + <TouchableOpacity + testID="altTextImageSaveBtn" + onPress={onPressSave} + accessibilityLabel={_(msg`Save alt text`)} + accessibilityHint="" + accessibilityRole="button"> + <LinearGradient + colors={[gradients.blueLight.start, gradients.blueLight.end]} + start={{x: 0, y: 0}} + end={{x: 1, y: 1}} + style={[styles.button]}> + <Text type="button-lg" style={[s.white, s.bold]}> + <Trans>Done</Trans> + </Text> + </LinearGradient> + </TouchableOpacity> + </View> + </View> + </ScrollView> ) } const styles = StyleSheet.create({ - container: { - flex: 1, - height: '100%', - width: '100%', - paddingVertical: isWeb ? 0 : 18, - }, scrollContainer: { flex: 1, height: '100%', paddingHorizontal: isWeb ? 0 : 12, + paddingVertical: isWeb ? 0 : 24, }, scrollInner: { gap: 12, + paddingTop: isWeb ? 0 : 12, }, imageContainer: { borderRadius: 8, @@ -173,5 +155,6 @@ const styles = StyleSheet.create({ }, buttonControls: { gap: 8, + paddingBottom: isWeb ? 0 : 50, }, }) diff --git a/src/view/com/modals/EmbedConsent.tsx b/src/view/com/modals/EmbedConsent.tsx new file mode 100644 index 000000000..04104c52e --- /dev/null +++ b/src/view/com/modals/EmbedConsent.tsx @@ -0,0 +1,153 @@ +import React from 'react' +import {StyleSheet, TouchableOpacity, View} from 'react-native' +import LinearGradient from 'react-native-linear-gradient' +import {s, colors, gradients} from 'lib/styles' +import {Text} from '../util/text/Text' +import {ScrollView} from './util' +import {usePalette} from 'lib/hooks/usePalette' +import { + EmbedPlayerSource, + embedPlayerSources, + externalEmbedLabels, +} from '#/lib/strings/embed-player' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' +import {useModalControls} from '#/state/modals' +import {useSetExternalEmbedPref} from '#/state/preferences/external-embeds-prefs' +import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' + +export const snapPoints = [450] + +export function Component({ + onAccept, + source, +}: { + onAccept: () => void + source: EmbedPlayerSource +}) { + const pal = usePalette('default') + const {closeModal} = useModalControls() + const {_} = useLingui() + const setExternalEmbedPref = useSetExternalEmbedPref() + const {isMobile} = useWebMediaQueries() + + const onShowAllPress = React.useCallback(() => { + for (const key of embedPlayerSources) { + setExternalEmbedPref(key, 'show') + } + onAccept() + closeModal() + }, [closeModal, onAccept, setExternalEmbedPref]) + + const onShowPress = React.useCallback(() => { + setExternalEmbedPref(source, 'show') + onAccept() + closeModal() + }, [closeModal, onAccept, setExternalEmbedPref, source]) + + const onHidePress = React.useCallback(() => { + setExternalEmbedPref(source, 'hide') + closeModal() + }, [closeModal, setExternalEmbedPref, source]) + + return ( + <ScrollView + testID="embedConsentModal" + style={[ + s.flex1, + pal.view, + isMobile + ? {paddingHorizontal: 20, paddingTop: 10} + : {paddingHorizontal: 30}, + ]}> + <Text style={[pal.text, styles.title]}> + <Trans>External Media</Trans> + </Text> + + <Text style={pal.text}> + <Trans> + This content is hosted by {externalEmbedLabels[source]}. Do you want + to enable external media? + </Trans> + </Text> + <View style={[s.mt10]} /> + <Text style={pal.textLight}> + <Trans> + External media may allow websites to collect information about you and + your device. No information is sent or requested until you press the + "play" button. + </Trans> + </Text> + <View style={[s.mt20]} /> + <TouchableOpacity + testID="enableAllBtn" + onPress={onShowAllPress} + accessibilityRole="button" + accessibilityLabel={_( + msg`Show embeds from ${externalEmbedLabels[source]}`, + )} + accessibilityHint="" + onAccessibilityEscape={closeModal}> + <LinearGradient + colors={[gradients.blueLight.start, gradients.blueLight.end]} + start={{x: 0, y: 0}} + end={{x: 1, y: 1}} + style={[styles.btn]}> + <Text style={[s.white, s.bold, s.f18]}> + <Trans>Enable External Media</Trans> + </Text> + </LinearGradient> + </TouchableOpacity> + <View style={[s.mt10]} /> + <TouchableOpacity + testID="enableSourceBtn" + onPress={onShowPress} + accessibilityRole="button" + accessibilityLabel={_( + msg`Never load embeds from ${externalEmbedLabels[source]}`, + )} + accessibilityHint="" + onAccessibilityEscape={closeModal}> + <View style={[styles.btn, pal.btn]}> + <Text style={[pal.text, s.bold, s.f18]}> + <Trans>Enable {externalEmbedLabels[source]} only</Trans> + </Text> + </View> + </TouchableOpacity> + <View style={[s.mt10]} /> + <TouchableOpacity + testID="disableSourceBtn" + onPress={onHidePress} + accessibilityRole="button" + accessibilityLabel={_( + msg`Never load embeds from ${externalEmbedLabels[source]}`, + )} + accessibilityHint="" + onAccessibilityEscape={closeModal}> + <View style={[styles.btn, pal.btn]}> + <Text style={[pal.text, s.bold, s.f18]}> + <Trans>No thanks</Trans> + </Text> + </View> + </TouchableOpacity> + </ScrollView> + ) +} + +const styles = StyleSheet.create({ + title: { + textAlign: 'center', + fontWeight: 'bold', + fontSize: 24, + marginBottom: 12, + }, + btn: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + width: '100%', + borderRadius: 32, + padding: 14, + backgroundColor: colors.gray1, + }, +}) diff --git a/src/view/com/modals/Modal.tsx b/src/view/com/modals/Modal.tsx index 2aac20dac..f9d211d07 100644 --- a/src/view/com/modals/Modal.tsx +++ b/src/view/com/modals/Modal.tsx @@ -38,6 +38,7 @@ import * as VerifyEmailModal from './VerifyEmail' import * as ChangeEmailModal from './ChangeEmail' import * as SwitchAccountModal from './SwitchAccount' import * as LinkWarningModal from './LinkWarning' +import * as EmbedConsentModal from './EmbedConsent' const DEFAULT_SNAPPOINTS = ['90%'] const HANDLE_HEIGHT = 24 @@ -176,6 +177,9 @@ export function ModalsContainer() { } else if (activeModal?.name === 'link-warning') { snapPoints = LinkWarningModal.snapPoints element = <LinkWarningModal.Component {...activeModal} /> + } else if (activeModal?.name === 'embed-consent') { + snapPoints = EmbedConsentModal.snapPoints + element = <EmbedConsentModal.Component {...activeModal} /> } else { return null } diff --git a/src/view/com/modals/Modal.web.tsx b/src/view/com/modals/Modal.web.tsx index 12138f54d..c43a8a6ce 100644 --- a/src/view/com/modals/Modal.web.tsx +++ b/src/view/com/modals/Modal.web.tsx @@ -34,6 +34,7 @@ import * as BirthDateSettingsModal from './BirthDateSettings' import * as VerifyEmailModal from './VerifyEmail' import * as ChangeEmailModal from './ChangeEmail' import * as LinkWarningModal from './LinkWarning' +import * as EmbedConsentModal from './EmbedConsent' export function ModalsContainer() { const {isModalActive, activeModals} = useModals() @@ -129,6 +130,8 @@ function Modal({modal}: {modal: ModalIface}) { element = <ChangeEmailModal.Component /> } else if (modal.name === 'link-warning') { element = <LinkWarningModal.Component {...modal} /> + } else if (modal.name === 'embed-consent') { + element = <EmbedConsentModal.Component {...modal} /> } else { return null } diff --git a/src/view/com/util/post-embeds/ExternalGifEmbed.tsx b/src/view/com/util/post-embeds/ExternalGifEmbed.tsx new file mode 100644 index 000000000..f06c8b794 --- /dev/null +++ b/src/view/com/util/post-embeds/ExternalGifEmbed.tsx @@ -0,0 +1,170 @@ +import {EmbedPlayerParams, getGifDims} from 'lib/strings/embed-player' +import React from 'react' +import {Image, ImageLoadEventData} from 'expo-image' +import { + ActivityIndicator, + GestureResponderEvent, + LayoutChangeEvent, + Pressable, + StyleSheet, + View, +} from 'react-native' +import {isIOS, isNative, isWeb} from '#/platform/detection' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import {useExternalEmbedsPrefs} from 'state/preferences' +import {useModalControls} from 'state/modals' +import {useLingui} from '@lingui/react' +import {msg} from '@lingui/macro' +import {AppBskyEmbedExternal} from '@atproto/api' + +export function ExternalGifEmbed({ + link, + params, +}: { + link: AppBskyEmbedExternal.ViewExternal + params: EmbedPlayerParams +}) { + const externalEmbedsPrefs = useExternalEmbedsPrefs() + const {openModal} = useModalControls() + const {_} = useLingui() + + const thumbHasLoaded = React.useRef(false) + const viewWidth = React.useRef(0) + + // Tracking if the placer has been activated + const [isPlayerActive, setIsPlayerActive] = React.useState(false) + // Tracking whether the gif has been loaded yet + const [isPrefetched, setIsPrefetched] = React.useState(false) + // Tracking whether the image is animating + const [isAnimating, setIsAnimating] = React.useState(true) + const [imageDims, setImageDims] = React.useState({height: 100, width: 1}) + + // Used for controlling animation + const imageRef = React.useRef<Image>(null) + + const load = React.useCallback(() => { + setIsPlayerActive(true) + Image.prefetch(params.playerUri).then(() => { + // Replace the image once it's fetched + setIsPrefetched(true) + }) + }, [params.playerUri]) + + const onPlayPress = React.useCallback( + (event: GestureResponderEvent) => { + // Don't propagate on web + event.preventDefault() + + // Show consent if this is the first load + if (externalEmbedsPrefs?.[params.source] === undefined) { + openModal({ + name: 'embed-consent', + source: params.source, + onAccept: load, + }) + return + } + // If the player isn't active, we want to activate it and prefetch the gif + if (!isPlayerActive) { + load() + return + } + // Control animation on native + setIsAnimating(prev => { + if (prev) { + if (isNative) { + imageRef.current?.stopAnimating() + } + return false + } else { + if (isNative) { + imageRef.current?.startAnimating() + } + return true + } + }) + }, + [externalEmbedsPrefs, isPlayerActive, load, openModal, params.source], + ) + + const onLoad = React.useCallback((e: ImageLoadEventData) => { + if (thumbHasLoaded.current) return + setImageDims(getGifDims(e.source.height, e.source.width, viewWidth.current)) + thumbHasLoaded.current = true + }, []) + + const onLayout = React.useCallback((e: LayoutChangeEvent) => { + viewWidth.current = e.nativeEvent.layout.width + }, []) + + return ( + <Pressable + style={[ + {height: imageDims.height}, + styles.topRadius, + styles.gifContainer, + ]} + onPress={onPlayPress} + onLayout={onLayout} + accessibilityRole="button" + accessibilityHint={_(msg`Plays the GIF`)} + accessibilityLabel={_(msg`Play ${link.title}`)}> + {(!isPrefetched || !isAnimating) && ( // If we have not loaded or are not animating, show the overlay + <View style={[styles.layer, styles.overlayLayer]}> + <View style={[styles.overlayContainer, styles.topRadius]}> + {!isAnimating || !isPlayerActive ? ( // Play button when not animating or not active + <FontAwesomeIcon icon="play" size={42} color="white" /> + ) : ( + // Activity indicator while gif loads + <ActivityIndicator size="large" color="white" /> + )} + </View> + </View> + )} + <Image + source={{ + uri: + !isPrefetched || (isWeb && !isAnimating) + ? link.thumb + : params.playerUri, + }} // Web uses the thumb to control playback + style={{flex: 1}} + ref={imageRef} + onLoad={onLoad} + autoplay={isAnimating} + contentFit="contain" + accessibilityIgnoresInvertColors + accessibilityLabel={link.title} + accessibilityHint={link.title} + cachePolicy={isIOS ? 'disk' : 'memory-disk'} // cant control playback with memory-disk on ios + /> + </Pressable> + ) +} + +const styles = StyleSheet.create({ + topRadius: { + borderTopLeftRadius: 6, + borderTopRightRadius: 6, + }, + layer: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + }, + overlayContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(0,0,0,0.5)', + }, + overlayLayer: { + zIndex: 2, + }, + gifContainer: { + width: '100%', + overflow: 'hidden', + }, +}) diff --git a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx index 27aa804d3..af62aa2b3 100644 --- a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx +++ b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx @@ -8,6 +8,8 @@ import {AppBskyEmbedExternal} from '@atproto/api' import {toNiceDomain} from 'lib/strings/url-helpers' import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed' +import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed' +import {useExternalEmbedsPrefs} from 'state/preferences' export const ExternalLinkEmbed = ({ link, @@ -16,36 +18,27 @@ export const ExternalLinkEmbed = ({ }) => { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() + const externalEmbedPrefs = useExternalEmbedsPrefs() - const embedPlayerParams = React.useMemo( - () => parseEmbedPlayerFromUrl(link.uri), - [link.uri], - ) + const embedPlayerParams = React.useMemo(() => { + const params = parseEmbedPlayerFromUrl(link.uri) + + if (params && externalEmbedPrefs?.[params.source] !== 'hide') { + return params + } + }, [link.uri, externalEmbedPrefs]) return ( - <View - style={{ - flexDirection: !isMobile && !embedPlayerParams ? 'row' : 'column', - }}> + <View style={{flexDirection: 'column'}}> {link.thumb && !embedPlayerParams ? ( <View - style={ - !isMobile - ? { - borderTopLeftRadius: 6, - borderBottomLeftRadius: 6, - width: 120, - aspectRatio: 1, - overflow: 'hidden', - } - : { - borderTopLeftRadius: 6, - borderTopRightRadius: 6, - width: '100%', - height: 200, - overflow: 'hidden', - } - }> + style={{ + borderTopLeftRadius: 6, + borderTopRightRadius: 6, + width: '100%', + height: isMobile ? 200 : 300, + overflow: 'hidden', + }}> <Image style={styles.extImage} source={{uri: link.thumb}} @@ -53,15 +46,17 @@ export const ExternalLinkEmbed = ({ /> </View> ) : undefined} - {embedPlayerParams && ( - <ExternalPlayer link={link} params={embedPlayerParams} /> - )} + {(embedPlayerParams?.isGif && ( + <ExternalGifEmbed link={link} params={embedPlayerParams} /> + )) || + (embedPlayerParams && ( + <ExternalPlayer link={link} params={embedPlayerParams} /> + ))} <View style={{ paddingHorizontal: isMobile ? 10 : 14, paddingTop: 8, paddingBottom: 10, - flex: !isMobile ? 1 : undefined, }}> <Text type="sm" @@ -69,16 +64,15 @@ export const ExternalLinkEmbed = ({ style={[pal.textLight, styles.extUri]}> {toNiceDomain(link.uri)} </Text> - <Text - type="lg-bold" - numberOfLines={isMobile ? 4 : 2} - style={[pal.text]}> - {link.title || link.uri} - </Text> - {link.description ? ( + {!embedPlayerParams?.isGif && ( + <Text type="lg-bold" numberOfLines={4} style={[pal.text]}> + {link.title || link.uri} + </Text> + )} + {link.description && !embedPlayerParams?.hideDetails ? ( <Text type="md" - numberOfLines={isMobile ? 4 : 2} + numberOfLines={4} style={[pal.text, styles.extDescription]}> {link.description} </Text> @@ -90,8 +84,7 @@ export const ExternalLinkEmbed = ({ const styles = StyleSheet.create({ extImage: { - width: '100%', - height: 200, + flex: 1, }, extUri: { marginTop: 2, diff --git a/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx index 580cf363a..8b0858b69 100644 --- a/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx +++ b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx @@ -1,22 +1,32 @@ import React from 'react' import { ActivityIndicator, - Dimensions, GestureResponderEvent, Pressable, StyleSheet, + useWindowDimensions, View, } from 'react-native' +import Animated, { + measure, + runOnJS, + useAnimatedRef, + useFrameCallback, +} from 'react-native-reanimated' import {Image} from 'expo-image' import {WebView} from 'react-native-webview' -import YoutubePlayer from 'react-native-youtube-iframe' +import {useSafeAreaInsets} from 'react-native-safe-area-context' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import {msg} from '@lingui/macro' +import {useLingui} from '@lingui/react' +import {useNavigation} from '@react-navigation/native' +import {AppBskyEmbedExternal} from '@atproto/api' import {EmbedPlayerParams, getPlayerHeight} from 'lib/strings/embed-player' import {EventStopper} from '../EventStopper' -import {AppBskyEmbedExternal} from '@atproto/api' import {isNative} from 'platform/detection' -import {useNavigation} from '@react-navigation/native' import {NavigationProp} from 'lib/routes/types' +import {useExternalEmbedsPrefs} from 'state/preferences' +import {useModalControls} from 'state/modals' interface ShouldStartLoadRequest { url: string @@ -32,6 +42,8 @@ function PlaceholderOverlay({ isPlayerActive: boolean onPress: (event: GestureResponderEvent) => void }) { + const {_} = useLingui() + // If the player is active and not loading, we don't want to show the overlay. if (isPlayerActive && !isLoading) return null @@ -39,8 +51,8 @@ function PlaceholderOverlay({ <View style={[styles.layer, styles.overlayLayer]}> <Pressable accessibilityRole="button" - accessibilityLabel="Play Video" - accessibilityHint="" + accessibilityLabel={_(msg`Play Video`)} + accessibilityHint={_(msg`Play Video`)} onPress={onPress} style={[styles.overlayContainer, styles.topRadius]}> {!isPlayerActive ? ( @@ -77,31 +89,21 @@ function Player({ return ( <View style={[styles.layer, styles.playerLayer]}> <EventStopper> - {isNative && params.type === 'youtube_video' ? ( - <YoutubePlayer - videoId={params.videoId} - play - height={height} - onReady={onLoad} - webViewStyle={[styles.webview, styles.topRadius]} + <View style={{height, width: '100%'}}> + <WebView + javaScriptEnabled={true} + onShouldStartLoadWithRequest={onShouldStartLoadWithRequest} + mediaPlaybackRequiresUserAction={false} + allowsInlineMediaPlayback + bounces={false} + allowsFullscreenVideo + nestedScrollEnabled + source={{uri: params.playerUri}} + onLoad={onLoad} + setSupportMultipleWindows={false} // Prevent any redirects from opening a new window (ads) + style={[styles.webview, styles.topRadius]} /> - ) : ( - <View style={{height, width: '100%'}}> - <WebView - javaScriptEnabled={true} - onShouldStartLoadWithRequest={onShouldStartLoadWithRequest} - mediaPlaybackRequiresUserAction={false} - allowsInlineMediaPlayback - bounces={false} - allowsFullscreenVideo - nestedScrollEnabled - source={{uri: params.playerUri}} - onLoad={onLoad} - setSupportMultipleWindows={false} // Prevent any redirects from opening a new window (ads) - style={[styles.webview, styles.topRadius]} - /> - </View> - )} + </View> </EventStopper> </View> ) @@ -116,6 +118,10 @@ export function ExternalPlayer({ params: EmbedPlayerParams }) { const navigation = useNavigation<NavigationProp>() + const insets = useSafeAreaInsets() + const windowDims = useWindowDimensions() + const externalEmbedsPrefs = useExternalEmbedsPrefs() + const {openModal} = useModalControls() const [isPlayerActive, setPlayerActive] = React.useState(false) const [isLoading, setIsLoading] = React.useState(true) @@ -124,34 +130,51 @@ export function ExternalPlayer({ height: 0, }) - const viewRef = React.useRef<View>(null) + const viewRef = useAnimatedRef() + + const frameCallback = useFrameCallback(() => { + const measurement = measure(viewRef) + if (!measurement) return + + const {height: winHeight, width: winWidth} = windowDims + + // Get the proper screen height depending on what is going on + const realWinHeight = isNative // If it is native, we always want the larger number + ? winHeight > winWidth + ? winHeight + : winWidth + : winHeight // On web, we always want the actual screen height + + const top = measurement.pageY + const bot = measurement.pageY + measurement.height + + // We can use the same logic on all platforms against the screenHeight that we get above + const isVisible = top <= realWinHeight - insets.bottom && bot >= insets.top + + if (!isVisible) { + runOnJS(setPlayerActive)(false) + } + }, false) // False here disables autostarting the callback // watch for leaving the viewport due to scrolling React.useEffect(() => { + // We don't want to do anything if the player isn't active + if (!isPlayerActive) return + // Interval for scrolling works in most cases, However, for twitch embeds, if we navigate away from the screen the webview will // continue playing. We need to watch for the blur event const unsubscribe = navigation.addListener('blur', () => { setPlayerActive(false) }) - const interval = setInterval(() => { - viewRef.current?.measure((x, y, w, h, pageX, pageY) => { - const window = Dimensions.get('window') - const top = pageY - const bot = pageY + h - const isVisible = isNative - ? top >= 0 && bot <= window.height - : !(top >= window.height || bot <= 0) - if (!isVisible) { - setPlayerActive(false) - } - }) - }, 1e3) + // Start watching for changes + frameCallback.setActive(true) + return () => { unsubscribe() - clearInterval(interval) + frameCallback.setActive(false) } - }, [viewRef, navigation]) + }, [navigation, isPlayerActive, frameCallback]) // calculate height for the player and the screen size const height = React.useMemo( @@ -168,12 +191,26 @@ export function ExternalPlayer({ setIsLoading(false) }, []) - const onPlayPress = React.useCallback((event: GestureResponderEvent) => { - // Prevent this from propagating upward on web - event.preventDefault() + const onPlayPress = React.useCallback( + (event: GestureResponderEvent) => { + // Prevent this from propagating upward on web + event.preventDefault() - setPlayerActive(true) - }, []) + if (externalEmbedsPrefs?.[params.source] === undefined) { + openModal({ + name: 'embed-consent', + source: params.source, + onAccept: () => { + setPlayerActive(true) + }, + }) + return + } + + setPlayerActive(true) + }, + [externalEmbedsPrefs, openModal, params.source], + ) // measure the layout to set sizing const onLayout = React.useCallback( @@ -187,7 +224,7 @@ export function ExternalPlayer({ ) return ( - <View + <Animated.View ref={viewRef} style={{height}} collapsable={false} @@ -205,7 +242,6 @@ export function ExternalPlayer({ accessibilityIgnoresInvertColors /> )} - <PlaceholderOverlay isLoading={isLoading} isPlayerActive={isPlayerActive} @@ -217,7 +253,7 @@ export function ExternalPlayer({ height={height} onLoad={onLoad} /> - </View> + </Animated.View> ) } @@ -248,4 +284,8 @@ const styles = StyleSheet.create({ webview: { backgroundColor: 'transparent', }, + gifContainer: { + width: '100%', + overflow: 'hidden', + }, }) diff --git a/src/view/com/util/post-embeds/QuoteEmbed.tsx b/src/view/com/util/post-embeds/QuoteEmbed.tsx index e793f983e..fbb89af27 100644 --- a/src/view/com/util/post-embeds/QuoteEmbed.tsx +++ b/src/view/com/util/post-embeds/QuoteEmbed.tsx @@ -98,6 +98,7 @@ export function QuoteEmbed({ return ( <Link style={[styles.container, pal.borderDark, style]} + hoverStyle={{borderColor: pal.colors.borderLinkHover}} href={itemHref} title={itemTitle}> <PostMeta diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index c94ce9684..00a102e7b 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -63,7 +63,7 @@ export function PostEmbeds({ const mediaModeration = isModOnQuote ? {} : moderation const quoteModeration = isModOnQuote ? moderation : {} return ( - <View style={[styles.stackContainer, style]}> + <View style={style}> <PostEmbeds embed={embed.media} moderation={mediaModeration} /> <ContentHider moderation={quoteModeration}> <MaybeQuoteEmbed embed={embed.record} moderation={quoteModeration} /> @@ -168,11 +168,14 @@ export function PostEmbeds({ const link = embed.external return ( - <View style={[styles.extOuter, pal.view, pal.border, style]}> - <Link asAnchor href={link.uri}> - <ExternalLinkEmbed link={link} /> - </Link> - </View> + <Link + asAnchor + anchorNoUnderline + href={link.uri} + style={[styles.extOuter, pal.view, pal.borderDark, style]} + hoverStyle={{borderColor: pal.colors.borderLinkHover}}> + <ExternalLinkEmbed link={link} /> + </Link> ) } @@ -180,9 +183,6 @@ export function PostEmbeds({ } const styles = StyleSheet.create({ - stackContainer: { - gap: 6, - }, imagesContainer: { marginTop: 8, }, diff --git a/src/view/icons/index.tsx b/src/view/icons/index.tsx index 089d3f0a8..221b9702c 100644 --- a/src/view/icons/index.tsx +++ b/src/view/icons/index.tsx @@ -29,9 +29,10 @@ import {faChevronRight} from '@fortawesome/free-solid-svg-icons/faChevronRight' import {faCircle} from '@fortawesome/free-regular-svg-icons/faCircle' import {faCircleCheck as farCircleCheck} from '@fortawesome/free-regular-svg-icons/faCircleCheck' import {faCircleCheck} from '@fortawesome/free-solid-svg-icons/faCircleCheck' +import {faCircleDot} from '@fortawesome/free-solid-svg-icons/faCircleDot' import {faCircleExclamation} from '@fortawesome/free-solid-svg-icons/faCircleExclamation' +import {faCirclePlay} from '@fortawesome/free-regular-svg-icons/faCirclePlay' import {faCircleUser} from '@fortawesome/free-regular-svg-icons/faCircleUser' -import {faCircleDot} from '@fortawesome/free-solid-svg-icons/faCircleDot' import {faClone} from '@fortawesome/free-solid-svg-icons/faClone' import {faClone as farClone} from '@fortawesome/free-regular-svg-icons/faClone' import {faComment} from '@fortawesome/free-regular-svg-icons/faComment' @@ -129,9 +130,10 @@ library.add( faCircle, faCircleCheck, farCircleCheck, + faCircleDot, faCircleExclamation, + faCirclePlay, faCircleUser, - faCircleDot, faClone, farClone, faComment, diff --git a/src/view/screens/DebugNew.tsx b/src/view/screens/DebugNew.tsx new file mode 100644 index 000000000..0b7c5f03b --- /dev/null +++ b/src/view/screens/DebugNew.tsx @@ -0,0 +1,541 @@ +import React from 'react' +import {View} from 'react-native' +import {CenteredView, ScrollView} from '#/view/com/util/Views' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' + +import {useSetColorMode} from '#/state/shell' +import * as tokens from '#/alf/tokens' +import {atoms as a, useTheme, useBreakpoints, ThemeProvider as Alf} from '#/alf' +import {Button, ButtonText} from '#/view/com/Button' +import {Text, H1, H2, H3, H4, H5, H6} from '#/view/com/Typography' + +function ThemeSelector() { + const setColorMode = useSetColorMode() + + return ( + <View style={[a.flex_row, a.gap_md]}> + <Button + type="secondary" + size="small" + onPress={() => setColorMode('system')}> + System + </Button> + <Button + type="secondary" + size="small" + onPress={() => setColorMode('light')}> + Light + </Button> + <Button + type="secondary" + size="small" + onPress={() => setColorMode('dark')}> + Dark + </Button> + </View> + ) +} + +function BreakpointDebugger() { + const t = useTheme() + const breakpoints = useBreakpoints() + + return ( + <View> + <H3 style={[a.pb_md]}>Breakpoint Debugger</H3> + <Text style={[a.pb_md]}> + Current breakpoint: {!breakpoints.gtMobile && <Text>mobile</Text>} + {breakpoints.gtMobile && !breakpoints.gtTablet && <Text>tablet</Text>} + {breakpoints.gtTablet && <Text>desktop</Text>} + </Text> + <Text + style={[a.p_md, t.atoms.bg_contrast_100, {fontFamily: 'monospace'}]}> + {JSON.stringify(breakpoints, null, 2)} + </Text> + </View> + ) +} + +function ThemedSection() { + const t = useTheme() + + return ( + <View style={[t.atoms.bg, a.gap_md, a.p_xl]}> + <H3 style={[a.font_bold]}>theme.atoms.text</H3> + <View style={[a.flex_1, t.atoms.border, a.border_t]} /> + <H3 style={[a.font_bold, t.atoms.text_contrast_700]}> + theme.atoms.text_contrast_700 + </H3> + <View style={[a.flex_1, t.atoms.border, a.border_t]} /> + <H3 style={[a.font_bold, t.atoms.text_contrast_500]}> + theme.atoms.text_contrast_500 + </H3> + <View style={[a.flex_1, t.atoms.border_contrast_500, a.border_t]} /> + + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + t.atoms.bg, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg</Text> + </View> + <View + style={[ + a.flex_1, + t.atoms.bg_contrast_100, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg_contrast_100</Text> + </View> + </View> + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + t.atoms.bg_contrast_200, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg_contrast_200</Text> + </View> + <View + style={[ + a.flex_1, + t.atoms.bg_contrast_300, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg_contrast_300</Text> + </View> + </View> + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + t.atoms.bg_positive, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg_positive</Text> + </View> + <View + style={[ + a.flex_1, + t.atoms.bg_negative, + a.align_center, + a.justify_center, + {height: 60}, + ]}> + <Text>theme.bg_negative</Text> + </View> + </View> + </View> + ) +} + +export function DebugScreen() { + const t = useTheme() + + return ( + <ScrollView> + <CenteredView style={[t.atoms.bg]}> + <View style={[a.p_xl, a.gap_xxl, {paddingBottom: 200}]}> + <ThemeSelector /> + + <Alf theme="light"> + <ThemedSection /> + </Alf> + <Alf theme="dark"> + <ThemedSection /> + </Alf> + + <H1>Heading 1</H1> + <H2>Heading 2</H2> + <H3>Heading 3</H3> + <H4>Heading 4</H4> + <H5>Heading 5</H5> + <H6>Heading 6</H6> + + <Text style={[a.text_xxl]}>atoms.text_xxl</Text> + <Text style={[a.text_xl]}>atoms.text_xl</Text> + <Text style={[a.text_lg]}>atoms.text_lg</Text> + <Text style={[a.text_md]}>atoms.text_md</Text> + <Text style={[a.text_sm]}>atoms.text_sm</Text> + <Text style={[a.text_xs]}>atoms.text_xs</Text> + <Text style={[a.text_xxs]}>atoms.text_xxs</Text> + + <View style={[a.gap_md, a.align_start]}> + <Button> + {({state}) => ( + <View style={[a.p_md, a.rounded_full, t.atoms.bg_contrast_300]}> + <Text>Unstyled button, state: {JSON.stringify(state)}</Text> + </View> + )} + </Button> + + <Button type="primary" size="small"> + Button + </Button> + <Button type="secondary" size="small"> + Button + </Button> + + <Button type="primary" size="large"> + Button + </Button> + <Button type="secondary" size="large"> + Button + </Button> + + <Button type="secondary" size="small"> + {({type, size}) => ( + <> + <FontAwesomeIcon icon={['fas', 'plus']} size={12} /> + <ButtonText type={type} size={size}> + With an icon + </ButtonText> + </> + )} + </Button> + <Button type="primary" size="large"> + {({state: _state, ...rest}) => ( + <> + <FontAwesomeIcon icon={['fas', 'plus']} /> + <ButtonText {...rest}>With an icon</ButtonText> + </> + )} + </Button> + </View> + + <View style={[a.gap_md]}> + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_0}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_100}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_200}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_300}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_400}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_500}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_600}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_700}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_800}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_900}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.gray_1000}, + ]} + /> + </View> + + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_0}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_100}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_200}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_300}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_400}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_500}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_600}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_700}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_800}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_900}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.blue_1000}, + ]} + /> + </View> + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_0}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_100}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_200}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_300}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_400}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_500}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_600}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_700}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_800}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_900}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.green_1000}, + ]} + /> + </View> + <View style={[a.flex_row, a.gap_md]}> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_0}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_100}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_200}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_300}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_400}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_500}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_600}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_700}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_800}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_900}, + ]} + /> + <View + style={[ + a.flex_1, + {height: 60, backgroundColor: tokens.color.red_1000}, + ]} + /> + </View> + </View> + + <View> + <H3 style={[a.pb_md, a.font_bold]}>Spacing</H3> + + <View style={[a.gap_md]}> + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>xxs (2px)</Text> + <View style={[a.flex_1, a.pt_xxs, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>xs (4px)</Text> + <View style={[a.flex_1, a.pt_xs, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>sm (8px)</Text> + <View style={[a.flex_1, a.pt_sm, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>md (12px)</Text> + <View style={[a.flex_1, a.pt_md, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>lg (18px)</Text> + <View style={[a.flex_1, a.pt_lg, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>xl (24px)</Text> + <View style={[a.flex_1, a.pt_xl, t.atoms.bg_contrast_300]} /> + </View> + + <View style={[a.flex_row, a.align_center]}> + <Text style={{width: 80}}>xxl (32px)</Text> + <View style={[a.flex_1, a.pt_xxl, t.atoms.bg_contrast_300]} /> + </View> + </View> + </View> + + <BreakpointDebugger /> + </View> + </CenteredView> + </ScrollView> + ) +} diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index b8033f0b4..0e20a9cf7 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -19,6 +19,7 @@ import {useSession} from '#/state/session' import {loadString, saveString} from '#/lib/storage' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {clamp} from '#/lib/numbers' +import {PROD_DEFAULT_FEED} from '#/lib/constants' type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'> export function HomeScreen(props: Props) { @@ -109,7 +110,9 @@ function HomeScreenReady({ const homeFeedParams = React.useMemo<FeedParams>(() => { return { mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled), - mergeFeedSources: preferences.feeds.saved, + mergeFeedSources: preferences.feedViewPrefs.lab_mergeFeedEnabled + ? preferences.feeds.saved + : [PROD_DEFAULT_FEED('whats-hot')], } }, [preferences]) diff --git a/src/view/screens/Moderation.tsx b/src/view/screens/Moderation.tsx index 1bf8db2e0..96bb46cef 100644 --- a/src/view/screens/Moderation.tsx +++ b/src/view/screens/Moderation.tsx @@ -62,7 +62,7 @@ export function ModerationScreen({}: Props) { ]} testID="moderationScreen"> <ViewHeader title={_(msg`Moderation`)} showOnDesktop /> - <ScrollView> + <ScrollView contentContainerStyle={[styles.noBorder]}> <View style={styles.spacer} /> <TouchableOpacity testID="contentFilteringBtn" @@ -275,4 +275,10 @@ const styles = StyleSheet.create({ borderRadius: 30, marginRight: 12, }, + noBorder: { + borderBottomWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderTopWidth: 0, + }, }) diff --git a/src/view/screens/PreferencesExternalEmbeds.tsx b/src/view/screens/PreferencesExternalEmbeds.tsx new file mode 100644 index 000000000..24e7d56df --- /dev/null +++ b/src/view/screens/PreferencesExternalEmbeds.tsx @@ -0,0 +1,138 @@ +import React from 'react' +import {StyleSheet, View} from 'react-native' +import {useFocusEffect} from '@react-navigation/native' +import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types' +import {s} from 'lib/styles' +import {Text} from '../com/util/text/Text' +import {usePalette} from 'lib/hooks/usePalette' +import {useAnalytics} from 'lib/analytics/analytics' +import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' +import { + EmbedPlayerSource, + externalEmbedLabels, +} from '#/lib/strings/embed-player' +import {useSetMinimalShellMode} from '#/state/shell' +import {Trans} from '@lingui/macro' +import {ScrollView} from '../com/util/Views' +import { + useExternalEmbedsPrefs, + useSetExternalEmbedPref, +} from 'state/preferences' +import {ToggleButton} from 'view/com/util/forms/ToggleButton' +import {SimpleViewHeader} from '../com/util/SimpleViewHeader' + +type Props = NativeStackScreenProps< + CommonNavigatorParams, + 'PreferencesExternalEmbeds' +> +export function PreferencesExternalEmbeds({}: Props) { + const pal = usePalette('default') + const setMinimalShellMode = useSetMinimalShellMode() + const {screen} = useAnalytics() + const {isMobile} = useWebMediaQueries() + + useFocusEffect( + React.useCallback(() => { + screen('PreferencesExternalEmbeds') + setMinimalShellMode(false) + }, [screen, setMinimalShellMode]), + ) + + return ( + <View style={s.hContentRegion} testID="preferencesExternalEmbedsScreen"> + <SimpleViewHeader + showBackButton={isMobile} + style={[ + pal.border, + {borderBottomWidth: 1}, + !isMobile && {borderLeftWidth: 1, borderRightWidth: 1}, + ]}> + <View style={{flex: 1}}> + <Text type="title-lg" style={[pal.text, {fontWeight: 'bold'}]}> + <Trans>External Media Preferences</Trans> + </Text> + <Text style={pal.textLight}> + <Trans>Customize media from external sites.</Trans> + </Text> + </View> + </SimpleViewHeader> + <ScrollView + // @ts-ignore web only -prf + dataSet={{'stable-gutters': 1}} + contentContainerStyle={[pal.viewLight, {paddingBottom: 200}]}> + <View style={[pal.view]}> + <View style={styles.infoCard}> + <Text style={pal.text}> + <Trans> + External media may allow websites to collect information about + you and your device. No information is sent or requested until + you press the "play" button. + </Trans> + </Text> + </View> + </View> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + Enable media players for + </Text> + {Object.entries(externalEmbedLabels).map(([key, label]) => ( + <PrefSelector + source={key as EmbedPlayerSource} + label={label} + key={key} + /> + ))} + </ScrollView> + </View> + ) +} + +function PrefSelector({ + source, + label, +}: { + source: EmbedPlayerSource + label: string +}) { + const pal = usePalette('default') + const setExternalEmbedPref = useSetExternalEmbedPref() + const sources = useExternalEmbedsPrefs() + + return ( + <View> + <View style={[pal.view, styles.toggleCard]}> + <ToggleButton + type="default-light" + label={label} + labelType="lg" + isSelected={sources?.[source] === 'show'} + onPress={() => + setExternalEmbedPref( + source, + sources?.[source] === 'show' ? 'hide' : 'show', + ) + } + /> + </View> + </View> + ) +} + +const styles = StyleSheet.create({ + heading: { + paddingHorizontal: 18, + paddingTop: 14, + paddingBottom: 14, + }, + spacer: { + height: 8, + }, + infoCard: { + paddingHorizontal: 20, + paddingVertical: 14, + }, + toggleCard: { + paddingVertical: 8, + paddingHorizontal: 6, + marginBottom: 1, + }, +}) diff --git a/src/view/screens/PreferencesHomeFeed.tsx b/src/view/screens/PreferencesHomeFeed.tsx index 20ef72923..874272831 100644 --- a/src/view/screens/PreferencesHomeFeed.tsx +++ b/src/view/screens/PreferencesHomeFeed.tsx @@ -29,6 +29,7 @@ function RepliesThresholdInput({ const pal = usePalette('default') const [value, setValue] = useState(initialValue) const {mutate: setFeedViewPref} = useSetFeedViewPreferencesMutation() + const preValue = React.useRef(initialValue) const save = React.useMemo( () => debounce( @@ -46,7 +47,12 @@ function RepliesThresholdInput({ <Slider value={value} onValueChange={(v: number | number[]) => { - const threshold = Math.floor(Array.isArray(v) ? v[0] : v) + let threshold = Array.isArray(v) ? v[0] : v + if (threshold > preValue.current) threshold = Math.floor(threshold) + else threshold = Math.ceil(threshold) + + preValue.current = threshold + setValue(threshold) save(threshold) }} diff --git a/src/view/screens/PreferencesThreads.tsx b/src/view/screens/PreferencesThreads.tsx index 73d941932..35a010b55 100644 --- a/src/view/screens/PreferencesThreads.tsx +++ b/src/view/screens/PreferencesThreads.tsx @@ -75,10 +75,16 @@ export function PreferencesThreads({navigation}: Props) { <RadioGroup type="default-light" items={[ - {key: 'oldest', label: 'Oldest replies first'}, - {key: 'newest', label: 'Newest replies first'}, - {key: 'most-likes', label: 'Most-liked replies first'}, - {key: 'random', label: 'Random (aka "Poster\'s Roulette")'}, + {key: 'oldest', label: _(msg`Oldest replies first`)}, + {key: 'newest', label: _(msg`Newest replies first`)}, + { + key: 'most-likes', + label: _(msg`Most-liked replies first`), + }, + { + key: 'random', + label: _(msg`Random (aka "Poster's Roulette")`), + }, ]} onSelect={key => setThreadViewPrefs({sort: key})} initialSelection={preferences?.threadViewPrefs?.sort} @@ -97,7 +103,7 @@ export function PreferencesThreads({navigation}: Props) { </Text> <ToggleButton type="default-light" - label={prioritizeFollowedUsers ? 'Yes' : 'No'} + label={prioritizeFollowedUsers ? _(msg`Yes`) : _(msg`No`)} isSelected={prioritizeFollowedUsers} onPress={() => setThreadViewPrefs({ @@ -120,7 +126,7 @@ export function PreferencesThreads({navigation}: Props) { </Text> <ToggleButton type="default-light" - label={treeViewEnabled ? 'Yes' : 'No'} + label={treeViewEnabled ? _(msg`Yes`) : _(msg`No`)} isSelected={treeViewEnabled} onPress={() => setThreadViewPrefs({ diff --git a/src/view/screens/SavedFeeds.tsx b/src/view/screens/SavedFeeds.tsx index bbac30689..8a16ffdf2 100644 --- a/src/view/screens/SavedFeeds.tsx +++ b/src/view/screens/SavedFeeds.tsx @@ -82,7 +82,7 @@ export function SavedFeeds({}: Props) { isTabletOrDesktop && styles.desktopContainer, ]}> <ViewHeader title={_(msg`Edit My Feeds`)} showOnDesktop showBorder /> - <ScrollView style={s.flex1}> + <ScrollView style={s.flex1} contentContainerStyle={[styles.noBorder]}> <View style={[pal.text, pal.border, styles.title]}> <Text type="title" style={pal.text}> <Trans>Pinned Feeds</Trans> @@ -288,7 +288,7 @@ function ListItem({ <FeedSourceCard key={feedUri} feedUri={feedUri} - style={styles.noBorder} + style={styles.noTopBorder} showSaveBtn showMinimalPlaceholder /> @@ -344,7 +344,7 @@ const styles = StyleSheet.create({ webArrowUpButton: { marginBottom: 10, }, - noBorder: { + noTopBorder: { borderTopWidth: 0, }, footerText: { @@ -352,4 +352,10 @@ const styles = StyleSheet.create({ paddingTop: 22, paddingBottom: 100, }, + noBorder: { + borderBottomWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderTopWidth: 0, + }, }) diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index f85ce44b2..d413e234f 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -431,7 +431,7 @@ export function SettingsScreen({}: Props) { <View style={[pal.view, styles.toggleCard]}> <ToggleButton type="default-light" - label="Require alt text before posting" + label={_(msg`Require alt text before posting`)} labelType="lg" isSelected={requireAltTextEnabled} onPress={() => setRequireAltTextEnabled(!requireAltTextEnabled)} @@ -575,6 +575,39 @@ export function SettingsScreen({}: Props) { <Trans>Moderation</Trans> </Text> </TouchableOpacity> + + <View style={styles.spacer20} /> + + <Text type="xl-bold" style={[pal.text, styles.heading]}> + <Trans>Privacy</Trans> + </Text> + + <TouchableOpacity + testID="externalEmbedsBtn" + style={[ + styles.linkCard, + pal.view, + isSwitchingAccounts && styles.dimmed, + ]} + onPress={ + isSwitchingAccounts + ? undefined + : () => navigation.navigate('PreferencesExternalEmbeds') + } + accessibilityRole="button" + accessibilityHint="" + accessibilityLabel={_(msg`Opens external embeds settings`)}> + <View style={[styles.iconContainer, pal.btn]}> + <FontAwesomeIcon + icon={['far', 'circle-play']} + style={pal.text as FontAwesomeIconStyle} + /> + </View> + <Text type="lg" style={pal.text}> + <Trans>External Media Preferences</Trans> + </Text> + </TouchableOpacity> + <View style={styles.spacer20} /> <Text type="xl-bold" style={[pal.text, styles.heading]}> diff --git a/src/view/shell/Composer.web.tsx b/src/view/shell/Composer.web.tsx index 73f9f540e..ed64bc799 100644 --- a/src/view/shell/Composer.web.tsx +++ b/src/view/shell/Composer.web.tsx @@ -5,6 +5,10 @@ import {ComposePost} from '../com/composer/Composer' import {useComposerState} from 'state/shell/composer' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' +import { + EmojiPicker, + EmojiPickerState, +} from 'view/com/composer/text-input/web/EmojiPicker.web.tsx' const BOTTOM_BAR_HEIGHT = 61 @@ -13,6 +17,26 @@ export function Composer({}: {winHeight: number}) { const {isMobile} = useWebMediaQueries() const state = useComposerState() + const [pickerState, setPickerState] = React.useState<EmojiPickerState>({ + isOpen: false, + pos: {top: 0, left: 0, right: 0, bottom: 0}, + }) + + const onOpenPicker = React.useCallback((pos: DOMRect | undefined) => { + if (!pos) return + setPickerState({ + isOpen: true, + pos, + }) + }, []) + + const onClosePicker = React.useCallback(() => { + setPickerState(prev => ({ + ...prev, + isOpen: false, + })) + }, []) + // rendering // = @@ -41,8 +65,10 @@ export function Composer({}: {winHeight: number}) { quote={state.quote} onPost={state.onPost} mention={state.mention} + openPicker={onOpenPicker} /> </Animated.View> + <EmojiPicker state={pickerState} close={onClosePicker} /> </Animated.View> ) } diff --git a/src/view/shell/desktop/RightNav.tsx b/src/view/shell/desktop/RightNav.tsx index 02b742dc9..894624a6e 100644 --- a/src/view/shell/desktop/RightNav.tsx +++ b/src/view/shell/desktop/RightNav.tsx @@ -180,14 +180,14 @@ const styles = StyleSheet.create({ position: 'absolute', // @ts-ignore web only left: 'calc(50vw + 320px)', - width: 304, + width: 300, maxHeight: '100%', overflowY: 'auto', }, message: { paddingVertical: 18, - paddingHorizontal: 10, + paddingHorizontal: 12, }, messageLine: { marginBottom: 10, @@ -195,7 +195,7 @@ const styles = StyleSheet.create({ inviteCodes: { borderTopWidth: 1, - paddingHorizontal: 16, + paddingHorizontal: 12, paddingVertical: 12, flexDirection: 'row', }, |