diff options
Diffstat (limited to 'src')
79 files changed, 9108 insertions, 720 deletions
diff --git a/src/Splash.tsx b/src/Splash.tsx index 16375539f..fc70bb3b7 100644 --- a/src/Splash.tsx +++ b/src/Splash.tsx @@ -40,8 +40,6 @@ type Props = { isReady: boolean } -SplashScreen.preventAutoHideAsync().catch(() => {}) - const AnimatedLogo = Animated.createAnimatedComponent(Logo) export function Splash(props: React.PropsWithChildren<Props>) { diff --git a/src/lib/ThemeContext.tsx b/src/lib/ThemeContext.tsx index 483c50c42..38bd199cb 100644 --- a/src/lib/ThemeContext.tsx +++ b/src/lib/ThemeContext.tsx @@ -1,9 +1,7 @@ -import {isWeb} from 'platform/detection' import React, {ReactNode, createContext, useContext} from 'react' import { - AppState, TextStyle, - useColorScheme as useColorScheme_BUGGY, + useColorScheme, ViewStyle, ColorSchemeName, } from 'react-native' @@ -97,37 +95,11 @@ function getTheme(theme: ColorSchemeName) { return theme === 'dark' ? darkTheme : defaultTheme } -/** - * With RN iOS, we can only "trust" the color scheme reported while the app is - * active. This is a workaround until the bug is fixed upstream. - * - * @see https://github.com/bluesky-social/social-app/pull/1417#issuecomment-1719868504 - * @see https://github.com/facebook/react-native/pull/39439 - */ -function useColorScheme_FIXED() { - const colorScheme = useColorScheme_BUGGY() - const [currentColorScheme, setCurrentColorScheme] = - React.useState<ColorSchemeName>(colorScheme) - - React.useEffect(() => { - // we don't need to be updating state on web - if (isWeb) return - const subscription = AppState.addEventListener('change', state => { - const isActive = state === 'active' - if (!isActive) return - setCurrentColorScheme(colorScheme) - }) - return () => subscription.remove() - }, [colorScheme]) - - return isWeb ? colorScheme : currentColorScheme -} - export const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children, }) => { - const colorScheme = useColorScheme_FIXED() + const colorScheme = useColorScheme() const themeValue = getTheme(theme === 'system' ? colorScheme : theme) return ( diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 9a050fd3e..c964693c4 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -117,11 +117,7 @@ export class FeedViewPostsSlice { } export class NoopFeedTuner { - private keyCounter = 0 - - reset() { - this.keyCounter = 0 - } + reset() {} tune( feed: FeedViewPost[], _opts?: {dryRun: boolean; maintainOrder: boolean}, @@ -131,13 +127,13 @@ export class NoopFeedTuner { } export class FeedTuner { - private keyCounter = 0 + seenKeys: Set<string> = new Set() seenUris: Set<string> = new Set() constructor(public tunerFns: FeedTunerFn[]) {} reset() { - this.keyCounter = 0 + this.seenKeys.clear() this.seenUris.clear() } @@ -218,11 +214,16 @@ export class FeedTuner { } if (!dryRun) { - for (const slice of slices) { + slices = slices.filter(slice => { + if (this.seenKeys.has(slice._reactKey)) { + return false + } for (const item of slice.items) { this.seenUris.add(item.post.uri) } - } + this.seenKeys.add(slice._reactKey) + return true + }) } return slices diff --git a/src/lib/hooks/usePermissions.web.ts b/src/lib/hooks/usePermissions.web.ts new file mode 100644 index 000000000..c550a7d6d --- /dev/null +++ b/src/lib/hooks/usePermissions.web.ts @@ -0,0 +1,16 @@ +export function usePhotoLibraryPermission() { + const requestPhotoAccessIfNeeded = async () => { + // On the, we use <input type="file"> to produce a filepicker + // This does not need any permission granting. + return true + } + return {requestPhotoAccessIfNeeded} +} + +export function useCameraPermission() { + const requestCameraAccessIfNeeded = async () => { + return false + } + + return {requestCameraAccessIfNeeded} +} diff --git a/src/lib/moderatePost_wrapped.ts b/src/lib/moderatePost_wrapped.ts new file mode 100644 index 000000000..2195b2304 --- /dev/null +++ b/src/lib/moderatePost_wrapped.ts @@ -0,0 +1,58 @@ +import { + AppBskyEmbedRecord, + AppBskyEmbedRecordWithMedia, + moderatePost, +} from '@atproto/api' + +type ModeratePost = typeof moderatePost +type Options = Parameters<ModeratePost>[1] & { + hiddenPosts?: string[] +} + +export function moderatePost_wrapped( + subject: Parameters<ModeratePost>[0], + opts: Options, +) { + const {hiddenPosts = [], ...options} = opts + const moderations = moderatePost(subject, options) + + if (hiddenPosts.includes(subject.uri)) { + moderations.content.filter = true + moderations.content.blur = true + if (!moderations.content.cause) { + moderations.content.cause = { + // @ts-ignore Temporary extension to the moderation system -prf + type: 'post-hidden', + source: {type: 'user'}, + priority: 1, + } + } + } + + if (subject.embed) { + let embedHidden = false + if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) { + embedHidden = hiddenPosts.includes(subject.embed.record.uri) + } + if ( + AppBskyEmbedRecordWithMedia.isView(subject.embed) && + AppBskyEmbedRecord.isViewRecord(subject.embed.record.record) + ) { + embedHidden = hiddenPosts.includes(subject.embed.record.record.uri) + } + if (embedHidden) { + moderations.embed.filter = true + moderations.embed.blur = true + if (!moderations.embed.cause) { + moderations.embed.cause = { + // @ts-ignore Temporary extension to the moderation system -prf + type: 'post-hidden', + source: {type: 'user'}, + priority: 1, + } + } + } + } + + return moderations +} diff --git a/src/lib/moderation.ts b/src/lib/moderation.ts index 8ba99128b..bf19c208a 100644 --- a/src/lib/moderation.ts +++ b/src/lib/moderation.ts @@ -60,6 +60,13 @@ export function describeModerationCause( } } } + // @ts-ignore Temporary extension to the moderation system -prf + if (cause.type === 'post-hidden') { + return { + name: 'Post Hidden by You', + description: 'You have hidden this post', + } + } return cause.labelDef.strings[context].en } diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts new file mode 100644 index 000000000..ec996dfa5 --- /dev/null +++ b/src/lib/strings/embed-player.ts @@ -0,0 +1,152 @@ +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} + +export function parseEmbedPlayerFromUrl( + url: string, +): EmbedPlayerParams | undefined { + let urlp + try { + urlp = new URL(url) + } catch (e) { + return undefined + } + + // youtube + if (urlp.hostname === 'youtu.be') { + const videoId = urlp.pathname.split('/')[1] + if (videoId) { + return { + type: 'youtube_video', + videoId, + playerUri: `https://www.youtube.com/embed/${videoId}?autoplay=1`, + } + } + } + if (urlp.hostname === 'www.youtube.com' || urlp.hostname === '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`, + } + } + } + + // twitch + if (urlp.hostname === 'twitch.tv' || urlp.hostname === 'www.twitch.tv') { + const parent = + Platform.OS === 'web' ? window.location.hostname : 'localhost' + + const parts = urlp.pathname.split('/') + if (parts.length === 2 && parts[1]) { + return { + type: 'twitch_live', + channelId: parts[1], + playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=${parts[1]}&parent=${parent}`, + } + } + } + + // spotify + if (urlp.hostname === 'open.spotify.com') { + const [_, type, id] = urlp.pathname.split('/') + if (type && id) { + if (type === 'playlist') { + return { + type: 'spotify_playlist', + playlistId: id, + playerUri: `https://open.spotify.com/embed/playlist/${id}`, + } + } + if (type === 'album') { + return { + type: 'spotify_album', + albumId: id, + playerUri: `https://open.spotify.com/embed/album/${id}`, + } + } + if (type === 'track') { + return { + type: 'spotify_song', + songId: id, + playerUri: `https://open.spotify.com/embed/track/${id}`, + } + } + } + } + + // soundcloud + if ( + urlp.hostname === 'soundcloud.com' || + urlp.hostname === 'www.soundcloud.com' + ) { + const [_, user, trackOrSets, set] = urlp.pathname.split('/') + + if (user && trackOrSets) { + if (trackOrSets === 'sets' && set) { + return { + type: 'soundcloud_set', + user, + set: set, + playerUri: `https://w.soundcloud.com/player/?url=${url}&auto_play=true&visual=false&hide_related=true`, + } + } + + return { + type: 'soundcloud_track', + user, + track: trackOrSets, + playerUri: `https://w.soundcloud.com/player/?url=${url}&auto_play=true&visual=false&hide_related=true`, + } + } + } +} + +export function getPlayerHeight({ + type, + width, + hasThumb, +}: { + type: EmbedPlayerParams['type'] + width: number + hasThumb: boolean +}) { + if (!hasThumb) return (width / 16) * 9 + + switch (type) { + case 'youtube_video': + case 'twitch_live': + return (width / 16) * 9 + case 'spotify_album': + return 380 + case 'spotify_playlist': + return 360 + case 'spotify_song': + if (width <= 300) { + return 180 + } + return 232 + case 'soundcloud_track': + return 165 + case 'soundcloud_set': + return 360 + default: + return width + } +} diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts index e9bf4111d..8a71718c8 100644 --- a/src/lib/strings/url-helpers.ts +++ b/src/lib/strings/url-helpers.ts @@ -139,35 +139,6 @@ export function feedUriToHref(url: string): string { } } -export function getYoutubeVideoId(link: string): string | undefined { - let url - try { - url = new URL(link) - } catch (e) { - return undefined - } - - if ( - url.hostname !== 'www.youtube.com' && - url.hostname !== 'youtube.com' && - url.hostname !== 'youtu.be' - ) { - return undefined - } - if (url.hostname === 'youtu.be') { - const videoId = url.pathname.split('/')[1] - if (!videoId) { - return undefined - } - return videoId - } - const videoId = url.searchParams.get('v') as string - if (!videoId) { - return undefined - } - return videoId -} - /** * Checks if the label in the post text matches the host of the link facet. * diff --git a/src/locale/__tests__/helpers.test.ts b/src/locale/__tests__/helpers.test.ts index d4bc6c338..d4028c643 100644 --- a/src/locale/__tests__/helpers.test.ts +++ b/src/locale/__tests__/helpers.test.ts @@ -7,6 +7,6 @@ test('sanitizeAppLanguageSetting', () => { expect(sanitizeAppLanguageSetting('en')).toBe(AppLanguage.en) expect(sanitizeAppLanguageSetting('hi')).toBe(AppLanguage.hi) expect(sanitizeAppLanguageSetting('foo')).toBe(AppLanguage.en) - expect(sanitizeAppLanguageSetting('en,fr')).toBe(AppLanguage.en) - expect(sanitizeAppLanguageSetting('fr,en')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('en,foo')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('foo,en')).toBe(AppLanguage.en) }) diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts index 3039e587d..2e6868e6c 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -114,6 +114,13 @@ export function sanitizeAppLanguageSetting(appLanguage: string): AppLanguage { 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 + case 'es': + return AppLanguage.es default: continue } diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts index 174d56be5..9a9407c4c 100644 --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -5,6 +5,11 @@ 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' +import {messages as messagesEs} from '#/locale/locales/es/messages' + import {sanitizeAppLanguageSetting} from '#/locale/helpers' import {AppLanguage} from '#/locale/languages' @@ -21,6 +26,19 @@ export async function dynamicActivate(locale: AppLanguage) { i18n.loadAndActivate({locale, messages: messagesJa}) break } + case AppLanguage.fr: { + i18n.loadAndActivate({locale, messages: messagesFr}) + break + } + // 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 + } default: { i18n.loadAndActivate({locale, messages: messagesEn}) break diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts index 6edf23e05..734f6a0de 100644 --- a/src/locale/i18n.web.ts +++ b/src/locale/i18n.web.ts @@ -20,6 +20,19 @@ export async function dynamicActivate(locale: AppLanguage) { mod = await import(`./locales/ja/messages`) break } + case AppLanguage.fr: { + mod = await import(`./locales/fr/messages`) + break + } + // 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 + } default: { mod = await import(`./locales/en/messages`) break diff --git a/src/locale/languages.ts b/src/locale/languages.ts index 411b4a262..d9cdbd9d4 100644 --- a/src/locale/languages.ts +++ b/src/locale/languages.ts @@ -8,6 +8,10 @@ export enum AppLanguage { en = 'en', hi = 'hi', ja = 'ja', + fr = 'fr', + // DISABLED until this translation is fixed -prf + // de = 'de', + es = 'es', } interface AppLanguageConfig { @@ -19,6 +23,10 @@ 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'}, + {code2: AppLanguage.es, name: 'Español'}, ] export const LANGUAGES: Language[] = [ diff --git a/src/locale/locales/de/messages.po b/src/locale/locales/de/messages.po new file mode 100644 index 000000000..229862485 --- /dev/null +++ b/src/locale/locales/de/messages.po @@ -0,0 +1,2486 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-12-22 01:46+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: de\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/shell/desktop/RightNav.tsx:160 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "" + +#: 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} Liste" + +#: src/view/shell/desktop/RightNav.tsx:143 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "{invitesAvailable} Einladungscode verfügbar" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "{invitesAvailable} Einladungscodes verfügbar" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> Mitglieder" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<0>Wählen Sie Ihre</0><1>Empfohlenes</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>Folgen Sie einigen</0><1>Empfohlenes</1><2>Feed</2>" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "A content warning has been applied to this {0}." +msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "Eine neue Version der App ist verfügbar. Bitte aktualisieren Sie die App, um sie weiterhin nutzen zu können." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "Zugänglichkeit" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "Konto" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "Konto Optionen" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:754 +msgid "Add" +msgstr "Hinzufügen" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "Eine Inhaltswarnung hinzufügen" + +#: src/view/screens/ProfileList.tsx:744 +msgid "Add a user to this list" +msgstr "Einen Benutzer zu dieser Liste hinzufügen" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "Konto hinzufügen" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "Alt Text hinzufügen" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "Einzelheiten hinzufügen" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "Einzelheiten zum Bericht hinzufügen" + +#: src/view/com/composer/Composer.tsx:442 +msgid "Add link card" +msgstr "Link Karte hinzufügen" + +#: src/view/com/composer/Composer.tsx:445 +msgid "Add link card:" +msgstr "Link Karte hinzufügen:" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "Fügen Sie den folgenden DNS-Eintrag zu Ihrem Domainnamen hinzu:" + +#: src/view/com/profile/ProfileHeader.tsx:353 +msgid "Add to Lists" +msgstr "Den Listen hinzufügen" + +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Add to my feeds" +msgstr "Zu meinen Feeds hinzufügen" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "Den Listen hinzufügen" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +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." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "Inhalt für Erwachsene" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "Fortgeschrittene" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "Alt Text" + +#: 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 "Alt-Text beschreibt Bilder für blinde und sehbehinderte Nutzer und hilft, den Zusammenhang für alle herzustellen." + +#: 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 "Es wurde eine E-Mail an {0} gesendet. Sie enthält einen Bestätigungscode, den Sie unten eingeben können." + +#: 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 "Es wurde eine E-Mail an Ihre frühere Adresse {0} gesendet. Sie enthält einen Bestätigungscode, den Sie unten eingeben können." + +#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "und" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "App Sprache" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "App-Passwörter" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "App-Passwörter" + +#: 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 "Berufungsentscheidung" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "Einspruch gegen diese Entscheidung" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "Einspruch gegen diese Entscheidung" + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "Aussehen" + +#: src/view/screens/AppPasswords.tsx:223 +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 +msgid "Are you sure you'd like to discard this draft?" +msgstr "Sind Sie sicher, dass Sie diesen Entwurf verwerfen möchten?" + +#: src/view/screens/ProfileList.tsx:352 +msgid "Are you sure?" +msgstr "Sind Sie sicher?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 +msgid "Are you sure? This cannot be undone." +msgstr "Sind Sie sicher? Dies kann nicht rückgängig gemacht werden" + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +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:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: 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 "Zurück" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Grundlagen" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "Geburtstag" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "Geburtstag:" + +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 +msgid "Block Account" +msgstr "Konto sperren" + +#: src/view/screens/ProfileList.tsx:522 +msgid "Block accounts" +msgstr "Kontos sperren" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Block list" +msgstr " Liste sperren" + +#: src/view/screens/ProfileList.tsx:307 +msgid "Block these accounts?" +msgstr "Diese Kontos sperren?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "Gesperrte Konten" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "Gesperrte Konten" + +#: src/view/com/profile/ProfileHeader.tsx:284 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Gesperrte Konten können nicht in Ihren Beiträgen antworten, Sie erwähnen oder anderweitig mit Ihnen interagieren." + +#: 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 "Gesperrte Konten können nicht in Ihren Beiträgen antworten, Sie erwähnen oder anderweitig mit Ihnen interagieren. Sie werden ihre Inhalte nicht sehen und sie werden daran gehindert, Ihre zu sehen." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "Gesperrter Posten." + +#: src/view/screens/ProfileList.tsx:309 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Die Sperrung ist öffentlich. Gesperrte Konten können nicht in Ihren Beiträgen antworten, Sie erwähnen oder anderweitig mit Ihnen interagieren." + +#: 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 ist flexibel." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky ist offen." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky ist öffentlich zugänglich." + +#: 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 verwendet Einladungen, um eine gesündere Gemeinschaft aufzubauen. Wenn du niemanden kennst, der eine Einladung hat, kannst du dich auf die Warteliste setzen lassen und wir werden dir bald eine schicken." + +#: 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 wird dein Profil und deine Beiträge nicht für abgemeldete Benutzer anzeigen. Andere Anwendungen erkennen diese Anforderung möglicherweise nicht an. Dies macht dein Konto nicht privat." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "Version bauen {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +msgid "Business" +msgstr "Geschäftlich" + +#: 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 "Kamera" + +#: 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 "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/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:584 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +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" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "Änderungsgriff abbrechen" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "Bildausschnitt abbrechen" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "Profilbearbeitung abbrechen" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "Angebotspost abbrechen" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "Suche abbrechen" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "Anmeldung zur Warteliste abbrechen" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "Ändern" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "Änderungsgriff andern" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "Änderungsgriff andern" + +#: src/view/com/modals/VerifyEmail.tsx:141 +msgid "Change my email" +msgstr "Meine E-Mail ändern" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "Ihre E-Mail ändern" + +#: 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 "Sehen Sie sich einige empfohlene Feeds an. Tippen Sie auf +, um sie zu Ihrer Liste der angehefteten Feeds hinzuzufügen." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "Sehen Sie sich einige empfohlene Benutzer an. Folgen Sie ihnen, um ähnliche Benutzer zu sehen." + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "Prüfen Sie Ihren Posteingang auf eine E-Mail mit dem Bestätigungscode, den Sie unten eingeben müssen:" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "Service auswählen" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "Wählen Sie die Algorithmen, die Ihr Erlebnis mit benutzerdefinierten Feeds unterstützen." + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "Wählen Sie Ihr Passwort" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "Alle alten Speicherdaten löschen" + +#: src/view/screens/Settings.tsx:696 +msgid "Clear all legacy storage data (restart after this)" +msgstr "Alle alten Speicherdaten löschen (danach neu starten)" + +#: src/view/screens/Settings.tsx:706 +msgid "Clear all storage data" +msgstr "Alle alten Speicherdaten löschen" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "Alle alten Speicherdaten löschen (danach neu starten)" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:569 +msgid "Clear search query" +msgstr "Suchanfrage löschen" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "Alarm schließen" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "Untere Schublade schließen" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "Bild schließen" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "Bildanzeige schließen" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "Navigationsfußzeile schließen" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "Gemeinschaftliche Leitlinien" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "Antwort zusammenstellen" + +#: 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:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "Bestätigen" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "Änderung bestätigen" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "Bestätigen Sie die Spracheinstellungen für den Inhalt" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "Bestätigen Sie Konto löschen" + +#: 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 "Bestätigungscode" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "Verbinden..." + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "Inhalt filtern" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "Inhalt filtern" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "Inhalt Sprachen" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "Inhaltliche Warnung" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "Inhaltliche Warnungen" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "Fortsetzung" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "Kopiert" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "Kopie" + +#: src/view/screens/ProfileList.tsx:384 +msgid "Copy link to list" +msgstr "Link zur Liste kopieren" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +msgid "Copy link to post" +msgstr "Link zum Posten kopieren" + +#: src/view/com/profile/ProfileHeader.tsx:338 +msgid "Copy link to profile" +msgstr "Link zum Profil kopieren" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 +msgid "Copy post text" +msgstr "Posten Text kopieren" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "Urheberrechtspolitik" + +#: src/view/screens/ProfileFeed.tsx:94 +msgid "Could not load feed" +msgstr "Feed konnte nicht geladen werden" + +#: src/view/screens/ProfileList.tsx:830 +msgid "Could not load list" +msgstr "Liste konnte nicht geladen werden" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +msgid "Create a new account" +msgstr "Ein neues Konto erstellen" + +#: src/view/com/auth/create/CreateAccount.tsx:120 +msgid "Create Account" +msgstr "Neues Konto erstellen" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "Ein neues Konto erstellen" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "Erstellt {0}" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "Benutzerdefinierter Bereich" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "Gefahrenzone" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "Konto löschen" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "Konto löschen" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "App-Passwort löschen" + +#: src/view/screens/ProfileList.tsx:351 +#: src/view/screens/ProfileList.tsx:411 +msgid "Delete List" +msgstr "Liste löschen" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "Mein Konto löschen" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "Mein Konto löschen..." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 +msgid "Delete post" +msgstr "Posten löschen" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 +msgid "Delete this post?" +msgstr "Diesen Posten löschen?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "Posten gelöscht." + +#: 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 "Beschreibung" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "Entwicklungs-Server" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "Werkzeuge für Entwickler" + +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Discard" +msgstr "Verwerfen" + +#: src/view/com/composer/Composer.tsx:137 +msgid "Discard draft" +msgstr "Verwerfen" + +#: src/view/screens/Moderation.tsx:207 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "Verhindern, dass Anwendungen mein Konto für abgemeldete Benutzer anzeigen" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "Neue Feeds entdecken" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "Namen anzeigen" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "Namen anzeigen" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "Domain geprüft!" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: 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:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "Erledigt" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "Erledigt{extraText}" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "Jeder Code funktioniert einmal. Sie werden regelmäßig weitere Einladungscodes erhalten." + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "Bild bearbeiten" + +#: src/view/screens/ProfileList.tsx:399 +msgid "Edit list details" +msgstr "Listendetails bearbeiten" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "Meine Feeds bearbeiten" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "Mein Profil bearbeiten" + +#: src/view/com/profile/ProfileHeader.tsx:453 +msgid "Edit profile" +msgstr "Profil bearbeiten" + +#: src/view/com/profile/ProfileHeader.tsx:456 +msgid "Edit Profile" +msgstr "Profil bearbeiten" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "Gespeicherte Feeds bearbeiten" + +#: src/view/com/auth/create/Step2.tsx:90 +#: 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 "E-Mail" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "E-Mail Adresse" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "Email aktualiziert" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "E-Mail:" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +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." + +#: src/view/screens/Profile.tsx:426 +msgid "End of feed" +msgstr "Ende des Feeds" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "Geben Sie die Adresse Ihres Anbieters ein:" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "Geben Sie die zu verwendende Domain ein" + +#: 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 "Geben Sie die E-Mail-Adresse ein, die Sie zur Erstellung Ihres Kontos verwendet haben. Wir senden Ihnen einen \"Reset-Code\" zu, mit dem Sie ein neues Passwort festlegen können." + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "Geben Sie Ihre E-Mail Adresse ein" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "Geben Sie Ihre E-Mail Adresse ein" + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "Geben Sie Ihren Benutzernamen und Ihr Passwort ein" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "Fehler:" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "Alle" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "Alt-Text erweitern" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "Empfohlene Feeds konnten nicht geladen werden" + +#: src/view/screens/Feeds.tsx:554 +msgid "Feed offline" +msgstr "Feed offline" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "Feed-Einstellungen" + +#: src/view/shell/desktop/RightNav.tsx:65 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "Rückmeldung" + +#: 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:340 +#: 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 "Feeds werden von Nutzern erstellt, um Inhalte zu kuratieren. Wählen Sie einige Feeds aus, die Sie interessant finden." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "Feeds sind benutzerdefinierte Algorithmen, die von den Nutzern mit ein wenig Programmierkenntnissen erstellt werden. <0/> für weitere Informationen." + +#: src/view/screens/Search/Search.tsx:414 +msgid "Find users on Bluesky" +msgstr "Benutzer auf Bluesky finden" + +#: src/view/screens/Search/Search.tsx:412 +msgid "Find users with the search tool on the right" +msgstr "Benutzer mit der Suchfunktion auf der rechten Seite finden" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "Suche nach ähnlichen Konten..." + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "Optimieren Sie die Inhalte, die Sie auf Ihrem Startbildschirm sehen." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "Feinabstimmung der Diskussionsstränge." + +#: src/view/com/profile/ProfileHeader.tsx:538 +msgid "Follow" +msgstr "Folgen Sie" + +#: 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 "Folgen Sie einigen Nutzern, um loszulegen. Wir können Ihnen weitere Nutzer empfehlen, je nachdem, wen Sie interessant finden." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "Verfolgte Benutzer" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "Nur verfolgte Benutzer" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "Verfolger" + +#: src/view/com/profile/ProfileHeader.tsx:624 +msgid "following" +msgstr "folgende" + +#: src/view/com/profile/ProfileHeader.tsx:522 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "Folgende" + +#: src/view/com/profile/ProfileHeader.tsx:571 +msgid "Follows you" +msgstr "Verfolgt Sie" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "Aus Sicherheitsgründen müssen wir Ihnen einen Bestätigungscode an Ihre E-Mail-Adresse senden." + +#: 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 "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:231 +msgid "Forgot" +msgstr "Vergessen" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "Passwort vergessen" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "Passwort vergessen" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "Galerie" + +#: src/view/com/modals/VerifyEmail.tsx:183 +msgid "Get Started" +msgstr "Anfangen" + +#: 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 "Zurückgehen" + +#: src/view/screens/ProfileFeed.tsx:103 +#: src/view/screens/ProfileFeed.tsx:108 +#: src/view/screens/ProfileList.tsx:839 +#: src/view/screens/ProfileList.tsx:844 +msgid "Go Back" +msgstr "Zurückgehen" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "Weiter zum nächsten" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "Handgriff" + +#: src/view/shell/desktop/RightNav.tsx:94 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "Hilfe" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "Hier ist Ihr App-Passwort." + +#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Ausblenden" + +#: 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:308 +msgid "Hide user list" +msgstr "Benutzerliste ausblenden" + +#: 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, es ist ein Problem bei der Kontaktaufnahme mit dem Feed-Server aufgetreten. Bitte informieren Sie den Eigentümer des Feeds über dieses Problem." + +#: 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, der Feed-Server scheint falsch konfiguriert zu sein. Bitte informieren Sie den Eigentümer des Feeds über dieses Problem." + +#: 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, der Feed-Server scheint falsch konfiguriert zu sein. Bitte informieren Sie den Eigentümer des Feeds über dieses Problem." + +#: 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, der Feed-Server scheint falsch konfiguriert zu sein. Bitte informieren Sie den Eigentümer des Feeds über dieses Problem." + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "Hmm, wir haben Probleme, diesen Feed zu finden. Vielleicht wurde er gelöscht." + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "Startseite" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "Startseite Feed-Einstellungen" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "Hosting-Anbieter" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "Hosting-Anbieter Adresse" + +#: src/view/com/modals/VerifyEmail.tsx:208 +msgid "I have a code" +msgstr "Ich habe einen Code" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "Ich habe meine eigene Domain" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "Wenn keine ausgewählt werden, sind sie für alle Altersgruppen geeignet." + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "Bild-Alt-Text" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "Bild-Optionen" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "Ungültiger Benutzername oder Passwort" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "Einladung" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "Einen Freund einladen" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "Einladungscode" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "Einladungscode nicht akzeptiert. Überprüfen Sie, ob Sie ihn richtig eingegeben haben und versuchen Sie es erneut." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "Codes einladen: {invitesAvailable} verfügbar" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +msgid "Jobs" +msgstr "Arbeitsplätze" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "Auf die Warteliste setzen" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "Auf die Warteliste setzen" + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "Auf die Warteliste setzen" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "Sprachauswahl" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "Spracheinstellungen" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "Sprachen" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "Mehr erfahren" + +#: 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 "Mehr erfahren" + +#: 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 "Erfahren Sie mehr über diese Warnung" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "Erfahren Sie mehr darüber, was auf Bluesky öffentlich zugänglich ist." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "Lassen Sie alle Kontrollkästchen deaktiviert, um alle Sprachen zu sehen." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Bluesky verlassen" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "Lassen Sie Ihr Passwort zurücksetzen!" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "Bibliothek" + +#: src/view/screens/ProfileFeed.tsx:577 +msgid "Like this feed" +msgstr "Dieser Feed gefallen" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "Gefallen bei" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "Likes" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "Avatar auflisten" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "Namen auflisten" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "Listen" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "Mehr Beiträge laden" + +#: src/view/screens/Notifications.tsx:144 +msgid "Load new notifications" +msgstr "Neue Benachrichtigungen laden" + +#: src/view/com/feeds/FeedPage.tsx:189 +msgid "Load new posts" +msgstr "Mehr Beiträge laden" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "Laden..." + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "Lokaler Entwicklungs-Server" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "Ausgeloggte Sichtbarkeit" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "Anmeldung bei einem Konto, das nicht aufgelistet ist" + +#: 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 "Es sieht so aus, als ob dieser Feed nur für Benutzer mit einem Bluesky-Konto verfügbar ist. Bitte melde dich an oder registriere dich, um diesen Feed zu sehen!" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "Vergewissern Sie sich, dass Sie dorthin gehen wollen!" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "Medien" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "genannte Nutzer" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "Genannte Nutzer" + +#: src/view/screens/Search/Search.tsx:529 +msgid "Menu" +msgstr "Menü" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "Meldung vom Server" + +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "Moderation" + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "Moderation Liste" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "Moderation Liste" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "Mehr Feeds " + +#: src/view/com/profile/ProfileHeader.tsx:548 +#: src/view/screens/ProfileFeed.tsx:360 +#: src/view/screens/ProfileList.tsx:583 +msgid "More options" +msgstr "Mehr Optionen" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Stummes Konto" + +#: src/view/screens/ProfileList.tsx:510 +msgid "Mute accounts" +msgstr "Stummes Konto" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Mute list" +msgstr "Stumme Liste" + +#: src/view/screens/ProfileList.tsx:270 +msgid "Mute these accounts?" +msgstr "Diese Konten stummschalten?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Mute thread" +msgstr "Thema stummschalten" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "Stumme Kontos" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "Stumme Kontos" + +#: 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 "Bei stummgeschalteten Konten werden deren Beiträge aus deinem Feed und deinen Benachrichtigungen entfernt. Stummschaltungen sind vollständig privat." + +#: src/view/screens/ProfileList.tsx:272 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Stummschalten ist privat. Stummgeschaltete Konten können mit Ihnen interagieren, aber Sie sehen ihre Beiträge nicht und erhalten keine Benachrichtigungen von ihnen." + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "Mein Geburtstag" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "Meine Feeds" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "Mein Profil " + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "Meine gespeicherte Feeds " + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "Namen" + +#: 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." + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "Neu" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:430 +#: src/view/screens/ProfileList.tsx:193 +#: src/view/screens/ProfileList.tsx:221 +#: src/view/shell/desktop/LeftNav.tsx:247 +msgid "New post" +msgstr "Neuer Posten " + +#: src/view/shell/desktop/LeftNav.tsx:257 +msgid "New Post" +msgstr "Neuer Posten " + +#: 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:281 +#: 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 "Nächster" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "Nächstes Bild " + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "Nein" + +#: src/view/screens/ProfileFeed.tsx:570 +#: src/view/screens/ProfileList.tsx:711 +msgid "No description" +msgstr "Ohne Beschreibung" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "Kein Ergebnis" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "Keine Ergebnisse gefunden für \"{query}\"" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "Keine Ergebnisse gefunden für {query}" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "Niemand" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "Nicht anwendbar." + +#: 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 "Hinweis: Bluesky ist ein offenes und öffentliches Netzwerk. Diese Einstellung schränkt nur die Sichtbarkeit Ihrer Inhalte auf der Bluesky-App und -Website ein, und andere Apps respektieren diese Einstellung möglicherweise nicht. Deine Inhalte können für abgemeldete Benutzer von anderen Apps und Websites weiterhin angezeigt werden." + +#: src/view/screens/Notifications.tsx:109 +#: src/view/screens/Notifications.tsx:133 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "Benachrichtigungen " + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "Ach nein!" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "Okay" + +#: src/view/com/composer/Composer.tsx:358 +msgid "One or more images is missing alt text." +msgstr "Bei einem oder mehreren Bildern fehlt der Alt-Text." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "Nur {0} kann antworten." + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "Offene Navigation" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "Öffnet die konfigurierbaren Spracheinstellungen" + +#: src/view/shell/desktop/RightNav.tsx:148 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "Öffnet die Liste der Einladungscodes" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "Öffnet ein Modal für die Verwendung einer benutzerdefinierten Domain" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "Öffnet die Moderationseinstellungen" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "Öffnet den Bildschirm mit allen gespeicherten Feeds" + +#: src/view/screens/Settings.tsx:581 +msgid "Opens the app password settings page" +msgstr "Öffnet die Einstellungsseite für das App-Passwort" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "Öffnet die Homefeed-Einstellungen" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "Öffnet die Märchenbuchseite" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "Öffnet die Systemprotokollseite" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "Öffnet die Thread-Einstellungen" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "Anderes Konto " + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "Anderes Service " + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "Andere..." + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "Seite nicht gefunden" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "Passwort" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "Passwort aktualisiert" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "Passwort aktualisiert!" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "Bilder, die für Erwachsene gedacht sind." + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "Angepinnte Feeds" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "Bitte wählen Sie Ihren Handgriff." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "Bitte wählen Sie Ihr Passwort." + +#: 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 "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sie ändern. Dies ist eine vorübergehende Anforderung, während E-Mail-Aktualisierungstools hinzugefügt werden, und sie wird bald entfernt werden." + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "Bitte geben Sie einen eindeutigen Namen für dieses App-Passwort ein oder verwenden Sie unser zufällig generiertes Passwort." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "Bitte geben Sie Ihre E-Mail-Adresse ein." + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "Bitte geben Sie auch Ihr Passwort ein:" + +#: 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 "Bitte teilen Sie uns mit, warum diese Entscheidung Ihrer Meinung nach falsch war." + +#: src/view/com/composer/Composer.tsx:214 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "Posten " + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "Versteckter Posten" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "Postsprache" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "Postsprachen" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "Posten nicht gefunden" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "Posten " + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "Potenziell missverständlicher Link" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "Vorheriges Bild" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "Primäre Sprache" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "Priorisieren Sie Ihre Anhängerschaft" + +#: src/view/shell/desktop/RightNav.tsx:76 +msgid "Privacy" +msgstr "Privatsphäre" + +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: src/view/shell/Drawer.tsx:262 +msgid "Privacy Policy" +msgstr "Datenschutzbestimmungen" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "Verarbeitung..." + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "Profile" + +#: src/view/screens/Settings.tsx:808 +msgid "Protect your account by verifying your email." +msgstr "Schützen Sie Ihr Konto, indem Sie Ihre E-Mail verifizieren." + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "Öffentliche, gemeinsam nutzbare Listen von Nutzern zum Stummschalten oder Blockieren in großen Mengen." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "Öffentliche, gemeinsam nutzbare Listen, die zu Feeds führen können." + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "Angebotsposten" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "Angebotsposten" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "Verhältnisse" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "Empfohlene Feeds" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "Empfohlene Benutzer" + +#: 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 "Entfernen Sie" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "{0} aus meinen Feeds entfernen?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "Konto entfernen" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "Feed entfernen" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Remove from my feeds" +msgstr "Aus meinen Feeds entfernen" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "Bild entfernen" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "Bildvorschau entfernen" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "Diesen Feed aus meinen Feeds entfernen?" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "Diesen Feed aus Ihren gespeicherten Feeds entfernen?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "Aus der Liste entfernt" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "Antworten" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "Antworten auf diesen Thread sind deaktiviert" + +#: src/view/screens/PreferencesHomeFeed.tsx:135 +msgid "Reply Filters" +msgstr "Antwort-Filter" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "Bericht {Sammlungsname}" + +#: src/view/com/profile/ProfileHeader.tsx:404 +msgid "Report Account" +msgstr "Bericht Konto" + +#: src/view/screens/ProfileFeed.tsx:290 +msgid "Report feed" +msgstr "Bericht Feed" + +#: src/view/screens/ProfileList.tsx:425 +msgid "Report List" +msgstr "Bericht Liste" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 +msgid "Report post" +msgstr "Beitrag berichten" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "Wiederveröffentlichung" + +#: 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 "Beitrag neu posten oder zitieren" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "Nachgetragen von" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "Änderung beantragen" + +#: src/view/com/auth/create/Step2.tsx:53 +msgid "Required for this provider" +msgstr "Für diesen Anbieter erforderlich" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "Code zurücksetzen" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "Onboarding-Status zurücksetzen" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "Passwort zurücksetzen" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "Einstellungen zurücksetzen" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "Onboarding-Status zurücksetzen" + +#: src/view/screens/Settings.tsx:674 +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:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: 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:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: 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 "Speichern" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "Alt-Text speichern" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "Änderung speichern" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "Griffänderung speichern" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "Bildausschnitt speichern" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "Gespeicherte Feeds" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:322 +#: 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 "Suche" + +#: 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 "Sicherheitsstufe erforderlich" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "Was kommt als Nächstes?" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Wählen Sie Bluesky Social" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "Aus einem bestehenden Konto auswählen" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "Dienst auswählen" + +#: 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 "Wählen Sie aus, welche Sprachen Ihre abonnierten Feeds enthalten sollen. Wenn Sie keine auswählen, werden alle Sprachen angezeigt." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "Wählen Sie Ihre App-Sprache für den Standardtext, der in der App angezeigt werden soll" + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "Wählen Sie Ihre bevorzugte Sprache für Übersetzungen in Ihrem Feed." + +#: src/view/com/modals/VerifyEmail.tsx:196 +msgid "Send Confirmation Email" +msgstr "Bestätigungs-E-Mail senden" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "E-Mail senden" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "E-Mail senden" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "Rückmeldung senden" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "Bericht senden" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "Neues Passwort festlegen" + +#: src/view/screens/PreferencesHomeFeed.tsx:216 +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 +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 +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 +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 +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." + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "Einstellungen" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "Sexuelle Aktivitäten oder erotische Nacktheit." + +#: src/view/com/profile/ProfileHeader.tsx:338 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:384 +msgid "Share" +msgstr "Teilen" + +#: src/view/screens/ProfileFeed.tsx:302 +msgid "Share feed" +msgstr "Feeds teilen" + +#: src/view/com/util/moderation/ContentHider.tsx:105 +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "Zeigen" + +#: src/view/com/util/moderation/ScreenHider.tsx:132 +msgid "Show anyway" +msgstr "Trotzdem anzeigen" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "Beiträge von My Feeds anzeigen" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "Angebotsposten zeigen" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "Antworten zeigen" + +#: src/view/screens/PreferencesThreads.tsx:94 +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 +msgid "Show Reposts" +msgstr "Wiederholungen anzeigen" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "Benutzer zeigen" + +#: 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 "Eintragen" + +#: 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 "Eintragen" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "Eintragen als {0}" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "Eintragen als..." + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "Anmelden" + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +msgid "Sign out" +msgstr "Ausmelden" + +#: 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 "Einmelden" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "Registrieren Sie sich oder melden Sie sich an, um an der Diskussion teilzunehmen" + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "Anmeldung erforderlich" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "Eintragen als" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "Überspringen" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "Antworten sortieren" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "Antworten auf denselben Beitrag sortieren nach:" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "Platz" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "Aufführung" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "Status-Seite" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "Märchenbuch" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "Einreichen" + +#: src/view/screens/ProfileList.tsx:574 +msgid "Subscribe" +msgstr "Abonnieren" + +#: src/view/screens/ProfileList.tsx:570 +msgid "Subscribe to this list" +msgstr "Abonnieren Sie diese Liste" + +#: src/view/screens/Search/Search.tsx:349 +msgid "Suggested Follows" +msgstr "Vorgeschlagene Followerliste" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "Unterstützung" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "Konto wechseln" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "System-Protokoll" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "Groß" + +#: src/view/shell/desktop/RightNav.tsx:85 +msgid "Terms" +msgstr "Bedingungen" + +#: src/view/screens/Settings.tsx:744 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "Bedingungen der Dienstleistung" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "Text-Eingabefeld" + +#: src/view/com/profile/ProfileHeader.tsx:306 +msgid "The account will be able to interact with you after unblocking." +msgstr "Das Konto kann nach der Entsperrung mit Ihnen interagieren." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "Die Gemeinschaftsrichtlinien wurden nach <0/> verschoben." + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "Die Urheberrechtspolitik wurde nach <0/> verschoben." + +#: src/view/com/post-thread/PostThread.tsx:433 +msgid "The post may have been deleted." +msgstr "Der Beitrag kann gelöscht worden sein." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "Die Datenschutzrichtlinie wurde nach <0/> verschoben." + +#: 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 "Das Support-Formular wurde verschoben. Wenn Sie Hilfe benötigen, wenden Sie sich bitte an<0/> oder besuchen Sie {HELP_DESK_URL}, um mit uns in Kontakt zu treten." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "Die Allgemeinen Geschäftsbedingungen wurden verschoben nach" + +#: 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 "Es gab ein unerwartetes Problem in der Anwendung. Bitte teilen Sie uns mit, wenn dies bei Ihnen der Fall ist!" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +#~ msgid "This {0} has been labeled." +#~ msgstr "Dieser {0} wurde gekennzeichnet." + +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "This {screenDescription} has been flagged:" +msgstr "Diese {screenDescription} wurde markiert:" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +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/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "Dieser Inhalt kann ohne Bluesky-Konto nicht angezeigt werden." + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "Dieser Feed wird derzeit stark frequentiert und ist vorübergehend nicht verfügbar. Bitte versuchen Sie es später erneut." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "Diese Informationen werden nicht an andere Nutzer weitergegeben." + +#: 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 "Dies ist wichtig für den Fall, dass Sie Ihre E-Mail-Adresse ändern oder Ihr Passwort zurücksetzen müssen." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "Das ist der Dienst, der Sie online hält." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "Dieser Link führt Sie auf die folgende Website:" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "Dieser Beitrag wurde gelöscht." + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "Diese Warnung ist nur für Beiträge mit angehängten Medien verfügbar." + +#: 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 "Einstellungen zum Thema" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "Gewindemodus" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "Dropdown umschalten" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "Verwandlungen" + +#: src/view/com/post-thread/PostThreadItem.tsx:704 +#: src/view/com/post-thread/PostThreadItem.tsx:706 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 +msgid "Translate" +msgstr "Übersetze" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "Nochmals versuchen" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Un-block list" +msgstr "Liste freigeben" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Un-mute list" +msgstr "Stummschaltliste aufheben" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +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." + +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 +msgid "Unblock" +msgstr "Freischalten" + +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 +msgid "Unblock Account" +msgstr "Konto freischalten" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "Umbuchung rückgängig machen" + +#: src/view/com/auth/create/state.ts:210 +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." + +#: src/view/com/profile/ProfileHeader.tsx:369 +msgid "Unmute Account" +msgstr "Konto entstören" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Unmute thread" +msgstr "Thema aufheben" + +#: src/view/screens/ProfileList.tsx:440 +msgid "Unpin moderation list" +msgstr "Moderation Liste" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "Aktualisieren Sie {displayName} in Listen" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "Aktualisierung verfügbar" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "Aktualisieren..." + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "Laden Sie eine Textdatei hoch:" + +#: 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 "Verwende App-Passwörter, um dich bei anderen Bluesky-Clients anzumelden, ohne dass du vollen Zugang zu deinem Konto oder Passwort hast." + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "Standardanbieter verwenden" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "Verwenden Sie dies, um sich mit Ihrem Handle bei der anderen App anzumelden." + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "Verwendet von:" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "Benutzerhandgriff" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "Benutzer Liste" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "Benutzername oder E-Mail Adresse" + +#: src/view/screens/ProfileList.tsx:738 +msgid "Users" +msgstr "Benutzer" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "Benutzer gefolgt von <0/>" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "Benutzer in \"{0}\"" + +#: src/view/screens/Settings.tsx:769 +msgid "Verify email" +msgstr "E-Mail überprüfen" + +#: src/view/screens/Settings.tsx:794 +msgid "Verify my email" +msgstr "E-Mail überprüfen" + +#: src/view/screens/Settings.tsx:803 +msgid "Verify My Email" +msgstr "E-Mail überprüfen" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "Neuer E-Mail überprüfen" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "Debug-Eintrag anzeigen" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "Avatar sehen" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "Seite besuchen" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "We're so excited to have you join us!" +msgstr "Wir freuen uns, Sie bei uns begrüßen zu dürfen!" + +#: src/view/screens/Search/Search.tsx:236 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "Es tut uns leid, aber Ihre Suche konnte nicht abgeschlossen werden. Bitte versuchen Sie es in ein paar Minuten erneut." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "Es tut uns leid! Wir können die Seite, die Sie suchen, nicht finden." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "Willkommen bei <0>Bluesky</0>" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "Was ist das Problem mit dieser {collectionName}?" + +#: src/view/com/auth/SplashScreen.tsx:34 +#~ msgid "What's next?" +#~ msgstr "Was kommt als Nächstes?" + +#: 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 "Welche Sprachen werden in diesem Beitrag verwendet?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "Welche Sprachen würden Sie gerne in Ihren algorithmischen Feeds sehen?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "Wer kann antworten." + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "Breit" + +#: src/view/com/composer/Composer.tsx:413 +msgid "Write post" +msgstr "Posten schreiben" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "Schreiben Sie Ihre Antwort" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "Ja" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "Sie können den Hosting-Anbieter jederzeit wechseln." + +#: 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 "Sie können sich jetzt mit Ihrem neuen Passwort anmelden." + +#: 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 "Du hast noch keine Einladungscodes! Wir schicken dir welche, wenn du schon etwas länger bei Bluesky bist." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "Sie haben keine angehefteten Feeds." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "Sie haben keine gespeicherte Feeds!" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "Sie haben keine gespeicherte Feeds." + +#: src/view/com/post-thread/PostThread.tsx:381 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "Sie haben den Verfasser blockiert oder Sie wurden vom Verfasser blockiert." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "Sie haben keine Feeds." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +msgstr "Sie haben keine Listen." + +#: 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 "Sie haben noch keine Konten gesperrt. Um ein Konto zu sperren, gehen Sie zu seinem Profil und wählen Sie \"Konto sperren\" aus dem Menü auf seinem Konto." + +#: 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 "Sie haben noch kein Kennwort für eine Anwendung erstellt. Sie können eines erstellen, indem Sie auf die Schaltfläche unten drücken." + +#: 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 "Sie haben noch keine Konten stummgeschaltet. Um ein Konto stumm zu schalten, gehen Sie zu seinem Profil und wählen Sie \"Konto stumm schalten\" aus dem Menü auf seinem Konto." + +#: 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 "Sie erhalten eine E-Mail mit einem \"Reset-Code\". Geben Sie diesen Code hier ein und geben Sie dann Ihr neues Passwort ein." + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "Ihr Konto" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "Ihr Geburtsdatum" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "Ihre E-Mail scheint ungültig zu sein." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "Ihre E-Mail wurde gespeichert! Wir werden Sie bald kontaktieren." + +#: 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 "Ihre E-Mail wurde aktualisiert, aber nicht verifiziert. Als nächsten Schritt verifizieren Sie bitte Ihre neue E-Mail." + +#: 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 "Ihre E-Mail ist noch nicht verifiziert worden. Dies ist ein wichtiger Sicherheitsschritt, den wir empfehlen." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "Ihr vollständiger Name lautet" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "Hosting-Anbieter" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:129 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "Ihre Einladungscodes werden ausgeblendet, wenn Sie sich mit einem App-Passwort anmelden." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "Deine Beiträge, Likes und Blocks sind öffentlich. Stummschaltungen sind privat." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "Ihr Profil" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "Ihr Benutzerhandgriff" diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 7485c163e..7139489a9 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -38,16 +38,16 @@ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite msgstr "" #: src/view/screens/Settings.tsx:407 -#: src/view/shell/Drawer.tsx:640 +#: src/view/shell/Drawer.tsx:659 msgid "{invitesAvailable} invite code available" msgstr "" #: src/view/screens/Settings.tsx:409 -#: src/view/shell/Drawer.tsx:642 +#: src/view/shell/Drawer.tsx:661 msgid "{invitesAvailable} invite codes available" msgstr "" -#: src/view/screens/Search/Search.tsx:88 +#: src/view/screens/Search/Search.tsx:87 msgid "{message}" msgstr "" @@ -130,11 +130,11 @@ msgstr "" msgid "Add details to report" msgstr "" -#: src/view/com/composer/Composer.tsx:438 +#: src/view/com/composer/Composer.tsx:442 msgid "Add link card" msgstr "" -#: src/view/com/composer/Composer.tsx:441 +#: src/view/com/composer/Composer.tsx:445 msgid "Add link card:" msgstr "" @@ -204,7 +204,7 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:207 +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 msgid "Appeal content warning" msgstr "" @@ -244,7 +244,7 @@ msgstr "" msgid "Are you sure?" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:190 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "" @@ -262,9 +262,9 @@ msgstr "" #: src/view/com/auth/login/LoginForm.tsx:249 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:45 -#: src/view/com/post-thread/PostThread.tsx:395 -#: src/view/com/post-thread/PostThread.tsx:445 -#: src/view/com/post-thread/PostThread.tsx:453 +#: 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 "" @@ -303,7 +303,7 @@ msgstr "" msgid "Blocked accounts" msgstr "" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "" @@ -311,11 +311,11 @@ msgstr "" msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "" -#: src/view/screens/ModerationBlockedAccounts.tsx:114 +#: 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:251 +#: src/view/com/post-thread/PostThread.tsx:250 msgid "Blocked post." msgstr "" @@ -373,9 +373,9 @@ 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:285 -#: src/view/com/composer/Composer.tsx:288 -#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/composer/Composer.tsx:289 +#: src/view/com/composer/Composer.tsx:292 +#: src/view/com/modals/AltImage.tsx:128 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -388,7 +388,7 @@ msgstr "" #: 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:592 +#: src/view/screens/Search/Search.tsx:584 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "" @@ -398,7 +398,7 @@ msgstr "" msgid "Cancel account deletion" msgstr "" -#: src/view/com/modals/AltImage.tsx:122 +#: src/view/com/modals/AltImage.tsx:123 msgid "Cancel add image alt text" msgstr "" @@ -493,7 +493,7 @@ msgid "Clear all storage data (restart after this)" msgstr "" #: src/view/com/util/forms/SearchInput.tsx:73 -#: src/view/screens/Search/Search.tsx:577 +#: src/view/screens/Search/Search.tsx:569 msgid "Clear search query" msgstr "" @@ -597,7 +597,7 @@ msgstr "" msgid "Copy link to list" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "" @@ -605,7 +605,7 @@ msgstr "" msgid "Copy link to profile" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:117 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "" @@ -678,15 +678,15 @@ msgstr "" msgid "Delete my account…" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:189 +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 msgid "Delete this post?" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:243 +#: src/view/com/post-thread/PostThread.tsx:242 msgid "Deleted post." msgstr "" @@ -705,6 +705,10 @@ msgstr "" msgid "Developer Tools" msgstr "" +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + #: src/view/com/composer/Composer.tsx:143 msgid "Discard" msgstr "" @@ -809,7 +813,7 @@ msgstr "" msgid "Enable this setting to only see replies between people you follow." msgstr "" -#: src/view/screens/Profile.tsx:425 +#: src/view/screens/Profile.tsx:426 msgid "End of feed" msgstr "" @@ -837,7 +841,7 @@ msgstr "" msgid "Enter your username and password" msgstr "" -#: src/view/screens/Search/Search.tsx:106 +#: src/view/screens/Search/Search.tsx:105 msgid "Error:" msgstr "" @@ -854,7 +858,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:554 msgid "Feed offline" msgstr "" @@ -863,16 +867,16 @@ msgid "Feed Preferences" msgstr "" #: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx:164 +#: src/view/screens/Profile.tsx:165 #: src/view/shell/bottom-bar/BottomBar.tsx:181 -#: src/view/shell/desktop/LeftNav.tsx:339 -#: src/view/shell/Drawer.tsx:455 -#: src/view/shell/Drawer.tsx:456 +#: src/view/shell/desktop/LeftNav.tsx:340 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "" @@ -884,11 +888,11 @@ msgstr "" msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" -#: src/view/screens/Search/Search.tsx:422 +#: src/view/screens/Search/Search.tsx:414 msgid "Find users on Bluesky" msgstr "" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:412 msgid "Find users with the search tool on the right" msgstr "" @@ -973,7 +977,7 @@ 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:103 +#: src/view/shell/desktop/LeftNav.tsx:104 msgid "Go back" msgstr "" @@ -995,7 +999,7 @@ msgid "Handle" msgstr "" #: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "" @@ -1008,6 +1012,14 @@ msgstr "" 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:308 msgid "Hide user list" msgstr "" @@ -1041,9 +1053,9 @@ msgstr "" #~ msgstr "" #: src/view/shell/bottom-bar/BottomBar.tsx:137 -#: src/view/shell/desktop/LeftNav.tsx:303 -#: src/view/shell/Drawer.tsx:379 -#: src/view/shell/Drawer.tsx:380 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "" @@ -1074,7 +1086,7 @@ msgstr "" msgid "If none are selected, suitable for all ages." msgstr "" -#: src/view/com/modals/AltImage.tsx:96 +#: src/view/com/modals/AltImage.tsx:97 msgid "Image alt text" msgstr "" @@ -1109,7 +1121,7 @@ msgstr "" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/view/shell/Drawer.tsx:621 +#: src/view/shell/Drawer.tsx:640 msgid "Invite codes: {invitesAvailable} available" msgstr "" @@ -1195,7 +1207,7 @@ msgstr "" msgid "Liked by" msgstr "" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "" @@ -1215,15 +1227,15 @@ msgstr "" msgid "List Name" msgstr "" -#: src/view/screens/Profile.tsx:165 -#: src/view/shell/desktop/LeftNav.tsx:376 -#: src/view/shell/Drawer.tsx:471 -#: src/view/shell/Drawer.tsx:472 +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 msgid "Lists" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:260 -#: src/view/com/post-thread/PostThread.tsx:268 +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 msgid "Load more posts" msgstr "" @@ -1263,7 +1275,7 @@ msgstr "" msgid "Make sure this is where you intend to go!" msgstr "" -#: src/view/screens/Profile.tsx:162 +#: src/view/screens/Profile.tsx:163 msgid "Media" msgstr "" @@ -1275,7 +1287,7 @@ msgstr "" msgid "Mentioned users" msgstr "" -#: src/view/screens/Search/Search.tsx:537 +#: src/view/screens/Search/Search.tsx:529 msgid "Menu" msgstr "" @@ -1285,9 +1297,9 @@ msgstr "" #: src/view/screens/Moderation.tsx:64 #: src/view/screens/Settings.tsx:563 -#: src/view/shell/desktop/LeftNav.tsx:394 -#: src/view/shell/Drawer.tsx:490 -#: src/view/shell/Drawer.tsx:491 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "" @@ -1329,7 +1341,7 @@ msgstr "" msgid "Mute these accounts?" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" msgstr "" @@ -1337,11 +1349,11 @@ msgstr "" msgid "Muted accounts" msgstr "" -#: src/view/screens/ModerationMutedAccounts.tsx:106 +#: src/view/screens/ModerationMutedAccounts.tsx:107 msgid "Muted Accounts" msgstr "" -#: src/view/screens/ModerationMutedAccounts.tsx:114 +#: 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 "" @@ -1361,7 +1373,7 @@ msgstr "" msgid "My Feeds" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "" @@ -1384,16 +1396,16 @@ msgid "New" msgstr "" #: src/view/com/feeds/FeedPage.tsx:200 -#: src/view/screens/Feeds.tsx:510 -#: src/view/screens/Profile.tsx:353 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 #: src/view/screens/ProfileFeed.tsx:430 #: src/view/screens/ProfileList.tsx:193 #: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/shell/desktop/LeftNav.tsx:247 msgid "New post" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:257 msgid "New Post" msgstr "" @@ -1436,9 +1448,9 @@ msgstr "" #~ msgstr "" #: src/view/com/modals/ListAddRemoveUsers.tsx:127 -#: src/view/screens/Search/Search.tsx:271 -#: src/view/screens/Search/Search.tsx:299 -#: src/view/screens/Search/Search.tsx:615 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "" @@ -1470,9 +1482,9 @@ msgstr "" #: src/view/screens/Notifications.tsx:109 #: src/view/screens/Notifications.tsx:133 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "" @@ -1484,7 +1496,7 @@ msgstr "" msgid "Okay" msgstr "" -#: src/view/com/composer/Composer.tsx:354 +#: src/view/com/composer/Composer.tsx:358 msgid "One or more images is missing alt text." msgstr "" @@ -1501,7 +1513,7 @@ msgid "Opens configurable language settings" msgstr "" #: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "" @@ -1612,13 +1624,17 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/composer/Composer.tsx:214 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:378 msgid "Post hidden" msgstr "" @@ -1630,11 +1646,11 @@ msgstr "" msgid "Post Languages" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:437 +#: src/view/com/post-thread/PostThread.tsx:430 msgid "Post not found" msgstr "" -#: src/view/screens/Profile.tsx:160 +#: src/view/screens/Profile.tsx:161 msgid "Posts" msgstr "" @@ -1659,6 +1675,8 @@ msgid "Privacy" msgstr "" #: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "" @@ -1667,14 +1685,14 @@ msgid "Processing..." msgstr "" #: src/view/shell/bottom-bar/BottomBar.tsx:247 -#: src/view/shell/desktop/LeftNav.tsx:412 -#: src/view/shell/Drawer.tsx:69 -#: src/view/shell/Drawer.tsx:525 -#: src/view/shell/Drawer.tsx:526 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: 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:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "" @@ -1759,7 +1777,7 @@ msgstr "" msgid "Removed from list" msgstr "" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "" @@ -1788,7 +1806,7 @@ msgid "Report List" msgstr "" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:167 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "" @@ -1859,7 +1877,7 @@ msgstr "" #~ msgid "Retry change handle" #~ msgstr "" -#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:93 #: src/view/com/modals/BirthDateSettings.tsx:96 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1869,7 +1887,7 @@ msgstr "" msgid "Save" msgstr "" -#: src/view/com/modals/AltImage.tsx:105 +#: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" msgstr "" @@ -1895,14 +1913,14 @@ msgstr "" #: src/view/com/modals/ListAddRemoveUsers.tsx:75 #: src/view/com/util/forms/SearchInput.tsx:64 -#: src/view/screens/Search/Search.tsx:401 -#: src/view/screens/Search/Search.tsx:567 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:322 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "" @@ -1959,8 +1977,8 @@ msgstr "" msgid "Send Email" msgstr "" -#: src/view/shell/Drawer.tsx:276 -#: src/view/shell/Drawer.tsx:297 +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 msgid "Send feedback" msgstr "" @@ -1993,9 +2011,9 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f msgstr "" #: src/view/screens/Settings.tsx:277 -#: src/view/shell/desktop/LeftNav.tsx:430 -#: src/view/shell/Drawer.tsx:546 -#: src/view/shell/Drawer.tsx:547 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "" @@ -2004,7 +2022,7 @@ msgid "Sexual activity or erotic nudity." msgstr "" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 #: src/view/screens/ProfileList.tsx:384 msgid "Share" msgstr "" @@ -2153,7 +2171,7 @@ msgstr "" msgid "Subscribe to this list" msgstr "" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:349 msgid "Suggested Follows" msgstr "" @@ -2182,7 +2200,9 @@ msgstr "" msgid "Terms" msgstr "" +#: src/view/screens/Settings.tsx:744 #: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" msgstr "" @@ -2203,7 +2223,7 @@ msgstr "" msgid "The Copyright Policy has been moved to <0/>" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:440 +#: src/view/com/post-thread/PostThread.tsx:433 msgid "The post may have been deleted." msgstr "" @@ -2267,6 +2287,10 @@ msgstr "" 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" @@ -2286,7 +2310,7 @@ msgstr "" #: src/view/com/post-thread/PostThreadItem.tsx:704 #: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/util/forms/PostDropdownBtn.tsx:103 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "" @@ -2330,7 +2354,7 @@ msgstr "" msgid "Unmute Account" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "" @@ -2399,15 +2423,15 @@ msgstr "" msgid "Users in \"{0}\"" msgstr "" -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:769 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:775 +#: src/view/screens/Settings.tsx:794 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:784 +#: src/view/screens/Settings.tsx:803 msgid "Verify My Email" msgstr "" @@ -2440,7 +2464,7 @@ msgstr "" #~ 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:238 +#: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2481,7 +2505,7 @@ msgstr "" msgid "Wide" msgstr "" -#: src/view/com/composer/Composer.tsx:409 +#: src/view/com/composer/Composer.tsx:413 msgid "Write post" msgstr "" @@ -2520,20 +2544,20 @@ msgstr "" msgid "You don't have any saved feeds." msgstr "" -#: src/view/com/post-thread/PostThread.tsx:388 +#: 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:141 +#: 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:145 +#: src/view/com/lists/ProfileLists.tsx:138 msgid "You have no lists." msgstr "" -#: src/view/screens/ModerationBlockedAccounts.tsx:131 +#: 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 "" @@ -2541,7 +2565,7 @@ msgstr "" msgid "You have not created any app passwords yet. You can create one by pressing the button below." msgstr "" -#: src/view/screens/ModerationMutedAccounts.tsx:130 +#: 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 "" @@ -2584,7 +2608,7 @@ msgstr "" #: src/view/screens/Settings.tsx:402 #: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po new file mode 100644 index 000000000..d1ea8ece8 --- /dev/null +++ b/src/locale/locales/es/messages.po @@ -0,0 +1,2486 @@ +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: es\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/shell/desktop/RightNav.tsx:160 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "{0}" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "Lista {purposeLabel} {0}" + +#: src/view/shell/desktop/RightNav.tsx:143 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "{invitesAvailable} código de invitación disponible" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "{invitesAvailable} códigos de invitación disponibles" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> miembros" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<0>Elige tus</0><1>publicaciones</1><2>recomendadas</2>" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some</0><1>Recommended</1><2>Users</2>" +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 "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "Ya está disponible una nueva versión de la aplicación. ActualÃzala para seguir utilizándola." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "Accesibilidad" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "Cuenta" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "Opciones de la cuenta" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:754 +msgid "Add" +msgstr "Agregar" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "Agregar una advertencia de cuenta" + +#: src/view/screens/ProfileList.tsx:744 +msgid "Add a user to this list" +msgstr "Agregar un usuario a esta lista" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "Agregar una cuenta" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "Agregar texto alt" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "Agregar detalles" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "Agregar detalles al informe" + +#: src/view/com/composer/Composer.tsx:442 +msgid "Add link card" +msgstr "Agregar una tarjeta de enlace" + +#: src/view/com/composer/Composer.tsx:445 +msgid "Add link card:" +msgstr "Agregar una tarjeta de enlace:" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "Añade el siguiente registro DNS a tu dominio:" + +#: src/view/com/profile/ProfileHeader.tsx:353 +msgid "Add to Lists" +msgstr "Agregar a listas" + +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Add to my feeds" +msgstr "Agregar a mis noticias" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "Agregar a una lista" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +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." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "Contenido para adultos" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "Avanzado" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "Texto alt" + +#: 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 "El texto alternativo describe las imágenes para los usuarios ciegos y con baja visión, y ayuda 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 "Se ha enviado un correo electrónico a {0}. Incluye un código de confirmación que puedes introducir a continuación." + +#: 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 "Se ha enviado un correo electrónico a tu dirección previa, {0}. Incluye un código de confirmación que puedes introducir a continuación." + +#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "y" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "Lenguaje de app" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "Contraseñas de la app" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "Contraseñas de la app" + +#: 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 "Decisión de apelación" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "Apelar esta decisión" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "Apelar esta decisión." + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "Aspecto exterior" + +#: src/view/screens/AppPasswords.tsx:223 +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 +msgid "Are you sure you'd like to discard this draft?" +msgstr "¿Estás seguro de que quieres descartar este borrador?" + +#: src/view/screens/ProfileList.tsx:352 +msgid "Are you sure?" +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," + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +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:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: 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 "Regresar" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Conceptos básicos" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "Cumpleaños" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "Cumpleaños:" + +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 +msgid "Block Account" +msgstr "Bloquear una cuenta" + +#: src/view/screens/ProfileList.tsx:522 +msgid "Block accounts" +msgstr "Bloquear cuentas" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Block list" +msgstr "Bloquear una lista" + +#: src/view/screens/ProfileList.tsx:307 +msgid "Block these accounts?" +msgstr "¿Bloquear estas cuentas?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "Cuentas bloqueadas" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "Cuentas bloqueadas" + +#: src/view/com/profile/ProfileHeader.tsx:284 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma." + +#: 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 "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma. Tú no verás su contenido y ellos no podrán ver el tuyo." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "Publicación bloqueada" + +#: src/view/screens/ProfileList.tsx:309 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "El bloque es público. Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma." + +#: 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 es flexible." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky es abierto." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky es 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 "Bluesky utiliza las invitaciones para construir una comunidad más saludable. Si no conoces a nadie con una invitación, puedes apuntarte a la lista de espera y te enviaremos una en 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 "Bluesky no mostrará tu perfil ni tus publicaciones a los usuarios que hayan cerrado sesión. Es posible que otras aplicaciones no acepten esta solicitud. Esto no hace que tu cuenta sea privada." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "Versión {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +msgid "Business" +msgstr "Negocios" + +#: 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ámara" + +#: 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ó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/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:584 +#: 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 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" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "Cancelar identificador de cambio" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "Cancelar recorte de imagen" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "Cancelar la edición de perfil" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "Cancelar la publicación de un presupuesto" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "Cancelar búsqueda" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "Cancelar la inscripción en la lista de espera" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "Cambiar" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "Cambiar el identificador" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "Cambiar el identificador" + +#: src/view/com/modals/VerifyEmail.tsx:141 +msgid "Change my email" +msgstr "Cambiar mi correo electrónico" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "Cambiar tu correo electrónico" + +#: 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 "Echa un vistazo a algunas publicaciones recomendadas. Pulsa + para añadirlos a tu lista de publicaciones ancladas." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "Echa un vistazo a algunos usuarios recomendados. SÃguelos para ver usuarios similares." + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "Consulta tu bandeja de entrada para recibir un correo electrónico con el código de confirmación que debes introducir a continuación:" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "Elige un Servicio" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "Elige los algoritmos que potencian tu experiencia con publicaciones personalizadas." + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "Elige tu contraseña" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "Borrar todos los datos de almacenamiento heredados" + +#: src/view/screens/Settings.tsx:696 +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 +msgid "Clear all storage data" +msgstr "Borrar todos los datos de almacenamiento" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "Borrar todos los datos de almacenamiento (reiniciar después de esto)" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:569 +msgid "Clear search query" +msgstr "Borrar consulta de búsqueda" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "Cerrar la alerta" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "Cierra el cajón inferior" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "Cerrar la imagen" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "Cerrar el visor de imagen" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "Cerrar el pie de página de navegación" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "Directrices de la comunidad" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "Redactar la respuesta" + +#: 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:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "Confirmar" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "Confirmar el cambio" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "Confirmar la configuración del idioma del contenido" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "Confirmar eliminación de cuenta" + +#: 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 confirmación" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "Conectando..." + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "Filtro de contenido" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "Filtro de contenido" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "Lenguajes de contenido" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "Advertencia de contenido" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "Advertencias de contenido" + +#: 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:384 +msgid "Copy link to list" +msgstr "Copia el enlace a la lista" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +msgid "Copy link to post" +msgstr "Copia el enlace a la publicación" + +#: src/view/com/profile/ProfileHeader.tsx:338 +msgid "Copy link to profile" +msgstr "Copia el enlace al perfil" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 +msgid "Copy post text" +msgstr "Copiar el texto de la publicación" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "PolÃtica de derechos de autor" + +#: src/view/screens/ProfileFeed.tsx:94 +msgid "Could not load feed" +msgstr "No se ha podido cargar las publicaciones" + +#: src/view/screens/ProfileList.tsx:830 +msgid "Could not load list" +msgstr "No se ha podido cargar la lista" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +msgid "Create a new account" +msgstr "Crear una cuenta nueva" + +#: src/view/com/auth/create/CreateAccount.tsx:120 +msgid "Create Account" +msgstr "Crear una cuenta" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "Crear una cuenta nueva" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "Creado {0}" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "Dominio personalizado" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "Zona de peligro" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "Borrar la cuenta" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "Borrar la cuenta" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "Borrar la contraseña de la app" + +#: src/view/screens/ProfileList.tsx:351 +#: src/view/screens/ProfileList.tsx:411 +msgid "Delete List" +msgstr "Borrar la lista" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "Borrar mi cuenta" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "Borrar mi cuenta..." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 +msgid "Delete post" +msgstr "Borrar una publicación" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 +msgid "Delete this post?" +msgstr "¿Borrar esta publicación?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "Se borró la publicación." + +#: 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 "Descripción" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "Servidor de desarrollo" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "Herramientas de desarrollador" + +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Discard" +msgstr "Descartar" + +#: src/view/com/composer/Composer.tsx:137 +msgid "Discard draft" +msgstr "Descartar el borrador" + +#: src/view/screens/Moderation.tsx:207 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "Evitar que las aplicaciones muestren mi cuenta a los usuarios desconectados" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "Descubrir nuevas publicaciones" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "Mostrar el nombre" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "Mostrar el nombre" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "¡Dominio verificado!" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: 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:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "Listo" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "Listo{extraText}" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "Cada código funciona una vez. Recibirás más códigos de invitación periódicamente." + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "Editar la imagen" + +#: src/view/screens/ProfileList.tsx:399 +msgid "Edit list details" +msgstr "Editar los detalles de la lista" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "Editar mis noticias" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "Editar mi perfil" + +#: src/view/com/profile/ProfileHeader.tsx:453 +msgid "Edit profile" +msgstr "Editar el perfil" + +#: src/view/com/profile/ProfileHeader.tsx:456 +msgid "Edit Profile" +msgstr "Editar el perfil" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "Editar mis noticias guardadas" + +#: src/view/com/auth/create/Step2.tsx:90 +#: 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 "Correo electrónico" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "Dirección de correo electrónico" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "Correo electrónico actualizado" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "Correo electrónico:" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +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." + +#: src/view/screens/Profile.tsx:426 +msgid "End of feed" +msgstr "Fin de noticias" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "Introduce la dirección de tu proveedor:" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "Introduce el dominio que quieres utilizar" + +#: 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 "Introduce el correo electrónico que utilizaste para crear tu cuenta. Te enviaremos un \"código de restablecimiento\" para que puedas establecer una nueva contraseña." + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "Introduce la dirección de correo electrónico" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "Introduce tu nueva dirección de correo electrónico a continuación." + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "Introduce tu nombre de usuario y contraseña" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "Error:" + +#: 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 el texto alt" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "Error al cargar las noticias recomendadas" + +#: src/view/screens/Feeds.tsx:554 +msgid "Feed offline" +msgstr "Noticias fuera de lÃnea" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "Preferencias de noticias" + +#: src/view/shell/desktop/RightNav.tsx:65 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "Comentarios" + +#: 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:340 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "Noticias" + +#: 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 "Se crean las noticias por los usuarios para crear colecciones de contenidos. Elige algunas noticias que te parezcan interesantes." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "Las noticias son algoritmos personalizados que los usuarios construyen con un poco de experiencia en codificación. <0/> para más información." + +#: src/view/screens/Search/Search.tsx:414 +msgid "Find users on Bluesky" +msgstr "Encontrar usuarios en Bluesky" + +#: src/view/screens/Search/Search.tsx:412 +msgid "Find users with the search tool on the right" +msgstr "Encuentra usuarios con la herramienta de búsqueda de la derecha" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "Encontrar cuentas similares..." + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "Ajusta el contenido que ves en tu pantalla de inicio." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "Ajusta los hilos de discusión." + +#: src/view/com/profile/ProfileHeader.tsx:538 +msgid "Follow" +msgstr "Seguir" + +#: 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 "Sigue a algunos usuarios para empezar. Podemos recomendarte más usuarios en función de los que te parezcan interesantes." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "Usuarios seguidos" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "Solo usuarios seguidos" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "Seguidores" + +#: src/view/com/profile/ProfileHeader.tsx:624 +msgid "following" +msgstr "siguiendo" + +#: src/view/com/profile/ProfileHeader.tsx:522 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "Siguiendo" + +#: src/view/com/profile/ProfileHeader.tsx:571 +msgid "Follows you" +msgstr "Te siguen" + +#: 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 razones de seguridad, tendremos que enviarte un código de confirmación a tu dirección de correo electrónico." + +#: 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 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:231 +msgid "Forgot" +msgstr "Lo olvidé" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "Olvidé mi contraseña" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "Olvidé mi contraseña" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "GalerÃa" + +#: src/view/com/modals/VerifyEmail.tsx:183 +msgid "Get Started" +msgstr "Comenzar" + +#: 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 "Regresar" + +#: src/view/screens/ProfileFeed.tsx:103 +#: src/view/screens/ProfileFeed.tsx:108 +#: src/view/screens/ProfileList.tsx:839 +#: src/view/screens/ProfileList.tsx:844 +msgid "Go Back" +msgstr "Regresar" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "Ir al siguiente" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "Identificador" + +#: src/view/shell/desktop/RightNav.tsx:94 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "Ayuda" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "Aquà tienes tu contraseña de la app." + +#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Ocultar" + +#: 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:308 +msgid "Hide user list" +msgstr "Ocultar la lista de usuarios" + +#: 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 "Se ha producido algún problema al contactar con el servidor de noticias. Por favor, informa al propietario de la noticia 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 "Parece que el servidor de noticias está mal configurado. Por favor, informa al propietario de la noticia 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 "Parece que el servidor de noticias está fuera de lÃnea. Por favor, informa al propietario de la noticia 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 "El servidor de noticias ha respondido de forma incorrecta. Por favor, informa al propietario de la noticia 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 "Tenemos problemas para encontrar esta noticia. Puede que la hayan borrado." + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: 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:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "Preferencias de noticias de la página inicial" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "Proveedor de alojamiento" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "Dirección del proveedor de alojamiento" + +#: src/view/com/modals/VerifyEmail.tsx:208 +msgid "I have a code" +msgstr "Tengo un código" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "Tengo mi propio dominio" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "Si no se selecciona ninguno, es apto para todas las edades." + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "Texto alt de la imagen" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "Opciones de la imagen" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "Nombre de usuario o contraseña no válidos" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "Invitar" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "Invitar a un amigo" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "Código de invitación" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "No se acepta el código de invitación. Comprueba que lo has introducido correctamente e inténtalo de nuevo." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "Códigos de invitación: {invitesAvailable} disponibles" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +msgid "Jobs" +msgstr "Tareas" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "Únete a la lista de espera" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "Únete a la lista de espera." + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "Únete a la lista de espera" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "Escoger el idioma" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "Configuración del idioma" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "Idiomas" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "Aprender más" + +#: 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 "Aprender más" + +#: 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 "Aprender más acerca de esta advertencia" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "Más información sobre lo que es público en Bluesky." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "Déjalos todos sin marcar para ver cualquier idioma." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Salir de 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 a restablecer tu contraseña!" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "LibrerÃa" + +#: src/view/screens/ProfileFeed.tsx:577 +msgid "Like this feed" +msgstr "Dar «me gusta» a esta noticia" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "Le ha gustado a" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "Cantidad de «Me gusta»" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "Avatar de la lista" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "Nombre de la lista" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: 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 "Cargar más publicaciones" + +#: src/view/screens/Notifications.tsx:144 +msgid "Load new notifications" +msgstr "Cargar notificaciones nuevas" + +#: src/view/com/feeds/FeedPage.tsx:189 +msgid "Load new posts" +msgstr "Cargar publicaciones nuevas" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "Cargando..." + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "Servidor de desarrollo local" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "Visibilidad de desconexión" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +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!" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "Medios" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "usuarios mencionados" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "Usuarios mencionados" + +#: src/view/screens/Search/Search.tsx:529 +msgid "Menu" +msgstr "Menú" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "Mensaje del servidor" + +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "Moderación" + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "Listas de moderación" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "Listas de moderación" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "Más canales de noticias" + +#: src/view/com/profile/ProfileHeader.tsx:548 +#: src/view/screens/ProfileFeed.tsx:360 +#: src/view/screens/ProfileList.tsx:583 +msgid "More options" +msgstr "Más opciones" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Silenciar la cuenta" + +#: src/view/screens/ProfileList.tsx:510 +msgid "Mute accounts" +msgstr "Silenciar las cuentas" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Mute list" +msgstr "Silenciar la lista" + +#: src/view/screens/ProfileList.tsx:270 +msgid "Mute these accounts?" +msgstr "¿Silenciar estas cuentas?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Mute thread" +msgstr "Silenciar el hilo" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "Cuentas silenciadas" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "Cuentas 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 "Las cuentas silenciadas eliminan sus publicaciones de tu canal de noticias y de tus notificaciones. Las cuentas silenciadas son completamente privadas." + +#: src/view/screens/ProfileList.tsx:272 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Silenciar es privado. Las cuentas silenciadas pueden interactuar contigo, pero no verás sus publicaciones ni recibirás notificaciones suyas." + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "Mi cumpleaños" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "Mis canales de noticias" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "Mi perfil" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "Mis canales de noticias guardados" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "Nombre" + +#: 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." + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "Nuevo" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:430 +#: src/view/screens/ProfileList.tsx:193 +#: src/view/screens/ProfileList.tsx:221 +#: src/view/shell/desktop/LeftNav.tsx:247 +msgid "New post" +msgstr "Publicación nueva" + +#: src/view/shell/desktop/LeftNav.tsx:257 +msgid "New Post" +msgstr "Publicación nueva" + +#: 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:281 +#: 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 "Siguiente" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "Imagen nueva" + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "No" + +#: src/view/screens/ProfileFeed.tsx:570 +#: src/view/screens/ProfileList.tsx:711 +msgid "No description" +msgstr "Sin descripción" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "Sin resultados" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "No se han encontrado resultados para \"{query}\"" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "No se han encontrado resultados para {query}" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "Nadie" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "No aplicable." + +#: 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: Bluesky es una red abierta y pública. Esta configuración sólo limita la visibilidad de tu contenido en la aplicación y el sitio web de Bluesky, y es posible que otras aplicaciones no respeten esta configuración. Otras aplicaciones y sitios web pueden seguir mostrando tu contenido a los usuarios que hayan cerrado sesión." + +#: src/view/screens/Notifications.tsx:109 +#: src/view/screens/Notifications.tsx:133 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "Notificaciones" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "¡Qué problema!" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "Está bien" + +#: src/view/com/composer/Composer.tsx:358 +msgid "One or more images is missing alt text." +msgstr "Falta el texto alternativo en una o varias imágenes." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "Solo {0} puede responder." + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "Abrir navegación" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "Abrir la configuración del idioma que se puede ajustar" + +#: src/view/shell/desktop/RightNav.tsx:148 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "Abre la lista de códigos de invitación" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "Abre el modal para usar el dominio personalizado" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "Abre la configuración de moderación" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "Abre la pantalla con todas las noticias guardadas" + +#: src/view/screens/Settings.tsx:581 +msgid "Opens the app password settings page" +msgstr "Abre la página de configuración de la contraseña de la app" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "Abre las preferencias de noticias de la página inicial" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "Abre la página del libro de cuentos" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "Abre la página de la bitácora del sistema" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "Abre las preferencias de hilos" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "Otra cuenta" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "Otro servicio" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "Otro..." + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "Página no encontrada" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "Contraseña" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "Contraseña actualizada" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "¡Contraseña actualizada!" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "Imágenes destinadas a adultos." + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "Canales de noticias anclados" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "Por favor, elige tu identificador." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "Por favor, elige tu contraseña." + +#: 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, confirma tu correo electrónico antes de cambiarlo. Se trata de un requisito temporal mientras se añaden herramientas de actualización de correo electrónico, y pronto se eliminará." + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "Introduce un nombre único para la contraseña de esta app o utiliza una generada aleatoriamente." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "Introduce tu correo electrónico." + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +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." + +#: src/view/com/composer/Composer.tsx:214 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "Publicación" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "Publicación oculta" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "Lenguaje de la publicación" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "Lenguajes de la publicación" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "Publicación no encontrada" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "Publicaciones" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "Enlace potencialmente engañoso" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "Imagen previa" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "Lenguajes primarios" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "Priorizar los usuarios a los que sigue" + +#: src/view/shell/desktop/RightNav.tsx:76 +msgid "Privacy" +msgstr "Privacidad" + +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: src/view/shell/Drawer.tsx:262 +msgid "Privacy Policy" +msgstr "PolÃtica de privacidad" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "Procesando..." + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: 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:808 +msgid "Protect your account by verifying your email." +msgstr "Protege tu cuenta verificando tu correo electrónico." + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "Listas públicas y compartibles de usuarios para silenciar o bloquear en bloque." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "Listas públicas y compartibles que pueden impulsar las noticias." + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "Citar una publicación" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "Citar una publicación" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "Proporciones" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "Canales de noticias recomendados" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "Usuarios 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 "Eliminar" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "¿Eliminar {0} de mis canales de noticias?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "Eliminar la cuenta" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "Eliminar el canal de noticias" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Remove from my feeds" +msgstr "Eliminar de mis canales de noticias" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "Eliminar la imagen" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "Eliminar la vista previa de la imagen" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "¿Eliminar este canal de mis canales de noticias?" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "¿Eliminar este canal de mis canales de noticias guardados?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "Eliminar de la lista" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "Respuestas" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "Las respuestas a este hilo están desactivadas" + +#: src/view/screens/PreferencesHomeFeed.tsx:135 +msgid "Reply Filters" +msgstr "Filtros de respuestas" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "Informe de {collectionName}" + +#: src/view/com/profile/ProfileHeader.tsx:404 +msgid "Report Account" +msgstr "Informe de la cuenta" + +#: src/view/screens/ProfileFeed.tsx:290 +msgid "Report feed" +msgstr "Informe del canal de noticias" + +#: src/view/screens/ProfileList.tsx:425 +msgid "Report List" +msgstr "Informe de la lista" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 +msgid "Report post" +msgstr "Informe de la publicación" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "Volver a publicar" + +#: 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 "Volver a publicar o citar publicación" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "Vuelto a publicar por" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "Solicitar un cambio" + +#: src/view/com/auth/create/Step2.tsx:53 +msgid "Required for this provider" +msgstr "Requerido para este proveedor" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "Restablecer el código" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "Restablecer el estado de incorporación" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "Restablecer la contraseña" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "Restablecer el estado de preferencias" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "Restablece el estado de incorporación" + +#: src/view/screens/Settings.tsx:674 +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:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: 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:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: 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 "Guardar" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "Guardar el texto alt" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "Guardar cambios" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "Guardar el cambio de identificador" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "Guardar el recorte de imagen" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "Guardar canales de noticias" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:322 +#: 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/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 "Se requiere un paso de seguridad" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "Ver lo que sigue" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Seleccionar Bluesky Social" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "Selecciona de una cuenta existente" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "Selecciona el servicio" + +#: 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 "Selecciona qué idiomas quieres que incluyan tus canales de noticias suscritos. Si no seleccionas ninguno, se mostrarán todos los idiomas." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "Selecciona el idioma de tu app para el texto que se mostrará por defecto en la app" + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "Selecciona el idioma que prefieras para las traducciones de tus noticias." + +#: src/view/com/modals/VerifyEmail.tsx:196 +msgid "Send Confirmation Email" +msgstr "Enviar el mensaje de confirmación" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "Enviar el mensaje" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "Enviar el mensaje" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "Enviar comentarios" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "Enviar el informe" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "Establecer la contraseña nueva" + +#: src/view/screens/PreferencesHomeFeed.tsx:216 +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 +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 +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 +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 +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." + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "Configuraciones" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "Actividad sexual o desnudez erótica." + +#: src/view/com/profile/ProfileHeader.tsx:338 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:384 +msgid "Share" +msgstr "Compartir" + +#: src/view/screens/ProfileFeed.tsx:302 +msgid "Share feed" +msgstr "Compartir las noticias" + +#: 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 de todas maneras" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "Mostrar publicaciones de mis noticias" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "Mostrar publicaciones de citas" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "Mostrar respuestas" + +#: src/view/screens/PreferencesThreads.tsx:94 +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 +msgid "Show Reposts" +msgstr "Mostrar publicaciones que se han publicado nuevamente" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "Mostrar usuarios" + +#: 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 "Iniciar sesión" + +#: 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 "Iniciar sesión" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "Iniciar sesión como {0}" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "Iniciar sesión como ..." + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "Iniciar sesión en" + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +msgid "Sign out" +msgstr "Cerrar sesión" + +#: 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 "Inscribirse" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "RegÃstrate o inicia sesión para unirte a la conversación" + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "Se requiere iniciar sesión" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "Se inició sesión como" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "Saltarse este paso" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "Clasificar respuestas" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "Ordenar las respuestas a un mismo mensaje por:" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "Cuadrado" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "Puesta en escena" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "Página de estado" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "Libro de cuentos" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "Enviar" + +#: src/view/screens/ProfileList.tsx:574 +msgid "Subscribe" +msgstr "Suscribirse" + +#: src/view/screens/ProfileList.tsx:570 +msgid "Subscribe to this list" +msgstr "Suscribirse a esta lista" + +#: src/view/screens/Search/Search.tsx:349 +msgid "Suggested Follows" +msgstr "Usuarios sugeridos a seguir" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "Soporte" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "Cambiar a otra cuenta" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "Bitácora del sistema" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "Alto" + +#: src/view/shell/desktop/RightNav.tsx:85 +msgid "Terms" +msgstr "Condiciones" + +#: src/view/screens/Settings.tsx:744 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "Condiciones de servicio" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "Campo de introducción de texto" + +#: src/view/com/profile/ProfileHeader.tsx:306 +msgid "The account will be able to interact with you after unblocking." +msgstr "La cuenta podrá interactuar contigo tras el desbloqueo." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "Las Directrices Comunitarias se ha trasladado a <0/>" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "La PolÃtica de derechos de autor se han trasladado a <0/>" + +#: src/view/com/post-thread/PostThread.tsx:433 +msgid "The post may have been deleted." +msgstr "Es posible que se haya borrado la publicación." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "La PolÃtica de privacidad se ha trasladado a <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 "Se ha movido el formulario de soporte. Si necesitas ayuda, por favor<0/> o visita {HELP_DESK_URL} para ponerte en contacto con nosotros." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "Las condiciones de servicio se han trasladado a" + +#: 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 "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:" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +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/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." + +#: 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 canal de noticias está recibiendo mucho tráfico y no está disponible temporalmente. Vuelve a intentarlo más tarde." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "Esta información no se comparte con otros usuarios." + +#: 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 "Esto es importante por si alguna vez necesitas cambiar tu correo electrónico o restablecer tu contraseña." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "Es el servicio que te mantiene en lÃnea." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "Este enlace te lleva al siguiente sitio web:" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "Esta publicación ha sido eliminada." + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "Esta advertencia sólo está disponible para las publicaciones con medios adjuntos." + +#: 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 "Preferencias de hilos" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "Modo con hilos" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "Conmutar el menú desplegable" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "Transformaciones" + +#: src/view/com/post-thread/PostThreadItem.tsx:704 +#: src/view/com/post-thread/PostThreadItem.tsx:706 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 +msgid "Translate" +msgstr "Traducir" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "Intentar nuevamente" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Un-block list" +msgstr "Desbloquear una lista" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Un-mute list" +msgstr "Desactivar la opción de silenciar la lista" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +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." + +#: 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 una cuenta" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "Deshacer esta publicación" + +#: src/view/com/auth/create/state.ts:210 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "Lamentablemente, no cumples los requisitos para crear una cuenta." + +#: src/view/com/profile/ProfileHeader.tsx:369 +msgid "Unmute Account" +msgstr "Desactivar la opción de silenciar la cuenta" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Unmute thread" +msgstr "Desactivar la opción de silenciar el hilo" + +#: src/view/screens/ProfileList.tsx:440 +msgid "Unpin moderation list" +msgstr "Desanclar la lista de moderación" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "Actualizar {displayName} en Listas" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "Actualización disponible" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "Actualizando..." + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "Carga un archivo de texto en:" + +#: 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 "Utiliza las contraseñas de la app para iniciar sesión en otros clientes Bluesky sin dar acceso completo a tu cuenta o contraseña." + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "Utiliza un proveedor predeterminado" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "UtilÃzalo para iniciar sesión en la otra aplicación junto con tu 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 del usuario" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "Listas de usuarios" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "Nombre de usuario o dirección de correo electrónico" + +#: src/view/screens/ProfileList.tsx:738 +msgid "Users" +msgstr "Usuarios" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "usuarios seguidos por <0/>" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "Usuarios en «{0}»" + +#: src/view/screens/Settings.tsx:769 +msgid "Verify email" +msgstr "Verificar el correo electrónico" + +#: src/view/screens/Settings.tsx:794 +msgid "Verify my email" +msgstr "Verificar mi correo electrónico" + +#: src/view/screens/Settings.tsx:803 +msgid "Verify My Email" +msgstr "Verificar mi correo electrónico" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "Verificar el correo electrónico nuevo" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "Ver entrada de depuración" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "Ver el avatar" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "Visitar el sitio" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "We're so excited to have you join us!" +msgstr "¡Nos hace mucha ilusión que te unas a nosotros!" + +#: src/view/screens/Search/Search.tsx:236 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "Lo sentimos, pero no se ha podido completar tu búsqueda. Vuelve a intentarlo dentro de unos minutos." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "Lo sentimos. No encontramos la página que buscabas." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "Bienvenido a <0>Bluesky</0>" + +#: src/view/com/modals/report/Modal.tsx:169 +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 "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "¿Qué idiomas se utilizan en esta publicación?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "¿Qué idiomas te gustarÃa ver en tus noticias algorÃtmicas?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "Quién puede responder" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "Ancho" + +#: src/view/com/composer/Composer.tsx:413 +msgid "Write post" +msgstr "Redactar una publicación" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "Redactar tu respuesta" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "SÃ" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "Puedes cambiar de proveedor de alojamiento en cualquier 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 "Ahora puedes iniciar sesión con tu nueva contraseña." + +#: 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 "¡Aún no tienes códigos de invitación! Te enviaremos algunos cuando lleves un poco más de tiempo en Bluesky." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "No tienes ninguna noticia anclada." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "¡No tienes ninguna noticia guardada!" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "No tienes ninguna noticia guardada." + +#: src/view/com/post-thread/PostThread.tsx:381 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "Has bloqueado al autor o has sido bloqueado por el autor." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "No tienes noticias." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +msgstr "No tienes 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 "Aún no has bloqueado ninguna cuenta. Para bloquear una cuenta, ve a su perfil y selecciona \"Bloquear cuenta\" en el menú de su cuenta." + +#: 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 "Aún no has creado ninguna contraseña de aplicación. Puedes crear una pulsando el botón de abajo." + +#: 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 "Aún no has silenciado ninguna cuenta. Para silenciar una cuenta, ve a su perfil y selecciona \"Silenciar cuenta\" en el menú de su cuenta." + +#: 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 "Recibirás un correo electrónico con un \"código de restablecimiento\". Introduce ese código aquà y, a continuación, introduce tu nueva contraseña." + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "Tu cuenta" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "Tu fecha de nacimiento" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "Tu correo electrónico parece no ser válido." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "¡Hemos guardado tu correo electrónico! Pronto nos pondremos en contacto contigo." + +#: 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 "Tu correo electrónico ha sido actualizado pero no verificado. Como siguiente paso, verifica tu nuevo correo electrónico." + +#: 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 "Tu correo electrónico aún no ha sido verificado. Este es un paso de seguridad importante que te recomendamos." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "Tu identificador completo será" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "Tu proveedor de alojamiento" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:129 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "Tus códigos de invitación están ocultos cuando inicias sesión con una contraseña de la app" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "Tus publicaciones, Me gustas y bloqueos son públicos. Las cuentas silenciadas son privadas." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "Tu perfil" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "Tu identificador del usuario" diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po new file mode 100644 index 000000000..8afd0e5fe --- /dev/null +++ b/src/locale/locales/fr/messages.po @@ -0,0 +1,2486 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-12-20 21:42+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: fr\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/shell/desktop/RightNav.tsx:160 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "{0, plural, one {# invite code available} other {# invite codes available}}" + +#: 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} Liste" + +#: src/view/shell/desktop/RightNav.tsx:143 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:659 +msgid "{invitesAvailable} invite code available" +msgstr "{invitesAvailable} code d’invitation disponible" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:661 +msgid "{invitesAvailable} invite codes available" +msgstr "{invitesAvailable} codes d’invitation disponibles" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "{message}" + +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "<0/> membres" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your</0><1>Recommended</1><2>Feeds</2>" +msgstr "<0>Choisissez vos</0><1>fils d’actualité</1><2>recommandés</2>" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some</0><1>Recommended</1><2>Users</2>" +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 "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "Une nouvelle version de l’application est disponible. Veuillez faire la mise à jour pour continuer à utiliser l’application." + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "Accessibilité" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "Compte" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "Options de compte" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:754 +msgid "Add" +msgstr "Ajouter" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "Ajouter un avertissement sur le contenu" + +#: src/view/screens/ProfileList.tsx:744 +msgid "Add a user to this list" +msgstr "Ajouter un utilisateur à cette liste" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "Ajouter un compte" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "Ajouter un texte alt" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "Ajouter des détails" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "Ajouter des détails au rapport" + +#: src/view/com/composer/Composer.tsx:442 +msgid "Add link card" +msgstr "Ajouter une carte link card" + +#: src/view/com/composer/Composer.tsx:445 +msgid "Add link card:" +msgstr "Ajouter une carte link card :" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "Ajoutez le registre DNS suivant à votre domaine :" + +#: src/view/com/profile/ProfileHeader.tsx:353 +msgid "Add to Lists" +msgstr "Ajouter aux listes" + +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Add to my feeds" +msgstr "Ajouter à mes fils d’actu" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "Ajouté à la liste" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +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é." + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "Contenu pour adultes" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "Avancé" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "ALT" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "Texte Alt" + +#: 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 "Le texte Alt décrit les images pour les utilisateurs aveugles et malvoyants, et aide à donner un contexte à tout le monde." + +#: 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 "Un e-mail a été envoyé à {0}. Il comprend un code de confirmation que vous pouvez saisir ici." + +#: 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 "Un courriel a été envoyé à votre ancienne adresse, {0}. Il comprend un code de confirmation que vous pouvez saisir ici." + +#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/threadgate/WhoCanReply.tsx:178 +msgid "and" +msgstr "et" + +#: src/view/screens/LanguageSettings.tsx:95 +msgid "App Language" +msgstr "Langue de l’application" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "Mots de passe de l’appli" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "Mots de passe de l’appli" + +#: 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 "Appel de la décision" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 +msgid "Appeal this decision" +msgstr "Faire appel de cette décision" + +#: src/view/com/util/moderation/LabelInfo.tsx:56 +msgid "Appeal this decision." +msgstr "Faire appel de cette décision." + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +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}\" ?" + +#: src/view/com/composer/Composer.tsx:142 +msgid "Are you sure you'd like to discard this draft?" +msgstr "Êtes-vous sûr de vouloir rejeter ce brouillon ?" + +#: src/view/screens/ProfileList.tsx:352 +msgid "Are you sure?" +msgstr "Vous confirmez ?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 +msgid "Are you sure? This cannot be undone." +msgstr "Vous confirmez ? Cela ne pourra pas être annulé." + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +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:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: 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 "Arrière" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Principes de base" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "Date de naissance" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "Date de naissance :" + +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 +msgid "Block Account" +msgstr "Bloquer ce compte" + +#: src/view/screens/ProfileList.tsx:522 +msgid "Block accounts" +msgstr "Bloquer ces comptes" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Block list" +msgstr "Liste de blocage" + +#: src/view/screens/ProfileList.tsx:307 +msgid "Block these accounts?" +msgstr "Bloquer ces comptes ?" + +#: src/view/screens/Moderation.tsx:123 +msgid "Blocked accounts" +msgstr "Comptes bloqués" + +#: src/view/screens/ModerationBlockedAccounts.tsx:107 +msgid "Blocked Accounts" +msgstr "Comptes bloqués" + +#: src/view/com/profile/ProfileHeader.tsx:284 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous." + +#: 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 "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous. Vous ne verrez pas leur contenu et ils ne pourront pas voir le vôtre." + +#: src/view/com/post-thread/PostThread.tsx:250 +msgid "Blocked post." +msgstr "Publication bloquée." + +#: src/view/screens/ProfileList.tsx:309 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "Le blocage est public. Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous." + +#: 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 est adaptable." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "Bluesky est ouvert." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "Bluesky est public." + +#: 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 distribue des invitations pour construire une communauté plus saine. Si personne ne peut vous donner une invitation, vous pouvez vous inscrire sur notre liste d’attente et nous vous en enverrons une bientôt." + +#: 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 n’affichera pas votre profil et vos messages à des utilisateurs non connectés. Il est possible que d’autres applications n’honorent pas cette demande. Cela ne privatise pas votre compte." + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "Bluesky.Social" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "Version Build {0} {1}" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:87 +msgid "Business" +msgstr "Affaires" + +#: 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 "Caméra" + +#: 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 "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/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:584 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +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" + +#: src/view/com/modals/AltImage.tsx:123 +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" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "Annuler recadrage de l’image" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "Annuler modification du profil" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "Annuler la citation" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "Annuler la recherche" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "Annuler l’inscription sur la liste d’attente" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "Changer" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "Changer pseudo" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "Changer Pseudo" + +#: src/view/com/modals/VerifyEmail.tsx:141 +msgid "Change my email" +msgstr "Modifier mon e-mail" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "Modifiez votre e-mail" + +#: 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 "Consultez quelques fils d’actu recommandés. Appuyez sur + pour les ajouter à votre liste de fils d’actualité." + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "Consultez quelques utilisateurs recommandés. Suivez-les pour voir des utilisateurs similaires." + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "Consultez votre boîte de réception, vous avez du recevoir un e-mail contenant un code de confirmation à saisir ci-dessous :" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "Choisir un service" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "Choisissez les algorithmes qui alimentent votre expérience avec des fils d’actualité personnalisés." + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "Choisissez votre mot de passe" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "Effacer toutes les données de stockage existantes" + +#: src/view/screens/Settings.tsx:696 +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 +msgid "Clear all storage data" +msgstr "Effacer toutes les données de stockage" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "Effacer toutes les données de stockage (redémarrer ensuite)" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:569 +msgid "Clear search query" +msgstr "Effacer la recherche" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "Fermer l’alerte" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "Fermer le tiroir du bas" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "Fermer l’image" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "Fermer la visionneuse d’images" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "Fermer le pied de page de navigation" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "Directives communautaires" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "Rédiger une réponse" + +#: 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:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "Confirmer" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "Confirmer le changement" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "Confirmer les paramètres de langue" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "Confirmer la suppression du compte" + +#: 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 "Code de confirmation" + +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "Connexion..." + +#: src/view/screens/Moderation.tsx:81 +msgid "Content filtering" +msgstr "Filtrage du contenu" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "Filtrage du contenu" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:278 +msgid "Content Languages" +msgstr "Langues du contenu" + +#: src/view/com/util/moderation/ScreenHider.tsx:78 +msgid "Content Warning" +msgstr "Avertissement sur le contenu" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "Avertissements sur le contenu" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "Continuer" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "Copié" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "Copie" + +#: src/view/screens/ProfileList.tsx:384 +msgid "Copy link to list" +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" + +#: src/view/com/profile/ProfileHeader.tsx:338 +msgid "Copy link to profile" +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" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "Politique sur les droits d’auteur" + +#: src/view/screens/ProfileFeed.tsx:94 +msgid "Could not load feed" +msgstr "Impossible de charger le fil d’actu" + +#: src/view/screens/ProfileList.tsx:830 +msgid "Could not load list" +msgstr "Impossible de charger la liste" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:62 +#: src/view/com/auth/SplashScreen.tsx:46 +msgid "Create a new account" +msgstr "Créer un nouveau compte" + +#: src/view/com/auth/create/CreateAccount.tsx:120 +msgid "Create Account" +msgstr "Créer un compte" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:54 +#: src/view/com/auth/SplashScreen.tsx:43 +msgid "Create new account" +msgstr "Créer un nouveau compte" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "{0} créé" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "Domaine personnalisé" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "Zone de danger" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "Supprimer compte" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "Supprimer compte" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "Supprimer le mot de passe de l’appli" + +#: src/view/screens/ProfileList.tsx:351 +#: src/view/screens/ProfileList.tsx:411 +msgid "Delete List" +msgstr "Supprimer la liste" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "Supprimer mon compte" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "Supprimer mon compte..." + +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 +msgid "Delete post" +msgstr "Supprimer publication" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 +msgid "Delete this post?" +msgstr "Supprimer cette publication ?" + +#: src/view/com/post-thread/PostThread.tsx:242 +msgid "Deleted post." +msgstr "Publication supprimée." + +#: 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 "Description" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "Serveur de dév" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "Outils du dév" + +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:143 +msgid "Discard" +msgstr "Ignorer" + +#: src/view/com/composer/Composer.tsx:137 +msgid "Discard draft" +msgstr "Ignorer 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" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "Découvrir de nouveaux fils d’actu" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "Afficher nom" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "Afficher 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/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:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "Terminé" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "Terminé{extraText}" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "Chaque code ne fonctionne qu’une seule fois. Vous recevrez régulièrement d’autres codes d’invitation." + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "Modifier l’image" + +#: src/view/screens/ProfileList.tsx:399 +msgid "Edit list details" +msgstr "Modifier les infos de la liste" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:84 +msgid "Edit My Feeds" +msgstr "Modifier mes fils d’actu" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "Modifier mon profil" + +#: src/view/com/profile/ProfileHeader.tsx:453 +msgid "Edit profile" +msgstr "Modifier profil" + +#: src/view/com/profile/ProfileHeader.tsx:456 +msgid "Edit Profile" +msgstr "Modifier profil" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "Modifier les fils d’actu enregistrés" + +#: src/view/com/auth/create/Step2.tsx:90 +#: 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 "E-mail" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "Adresse e-mail" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "E-mail mis à jour" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "E-mail :" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +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." + +#: src/view/screens/Profile.tsx:426 +msgid "End of feed" +msgstr "Fin du fil d’actu" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "Saisissez l’adresse de votre fournisseur :" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "Entrez le domaine que vous voulez utiliser" + +#: 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 "Saisissez l’e-mail que vous avez utilisé pour créer votre compte. Nous vous enverrons un « code de réinitialisation » afin changer votre mot de passe." + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "Entrez votre e-mail" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "Entrez votre nouvelle e-mail ci-dessous." + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "Entrez votre nom d’utilisateur et votre mot de passe" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "Erreur :" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "Tout le monde" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "Développer le texte alt" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "Échec du chargement des fils d’actu recommandés" + +#: src/view/screens/Feeds.tsx:554 +msgid "Feed offline" +msgstr "Fil d’actu hors ligne" + +#: src/view/com/feeds/FeedPage.tsx:143 +msgid "Feed Preferences" +msgstr "Préférences en matière de fil d’actu" + +#: src/view/shell/desktop/RightNav.tsx:65 +#: src/view/shell/Drawer.tsx:311 +msgid "Feedback" +msgstr "Feedback" + +#: 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:340 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "Fil d’actu" + +#: 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 "Les fils d’actu sont créés par les utilisateurs pour rassembler du contenu. Choisissez des fils d’actu qui vous intéressent." + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "Les fils d’actu sont des algorithmes personnalisés que les utilisateurs construisent avec un peu d’expertise en codage. <0/> pour obtenir de plus amples informations." + +#: src/view/screens/Search/Search.tsx:414 +msgid "Find users on Bluesky" +msgstr "Trouver des utilisateurs sur Bluesky" + +#: src/view/screens/Search/Search.tsx:412 +msgid "Find users with the search tool on the right" +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..." + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "Affinez le contenu de votre écran d’accueil." + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "Affiner les fils de discussion." + +#: src/view/com/profile/ProfileHeader.tsx:538 +msgid "Follow" +msgstr "Suivre" + +#: 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 "Suivez quelques utilisateurs pour commencer. Nous pouvons vous recommander d’autres utilisateurs en fonction des personnes qui vous intéressent." + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "Utilisateurs suivis" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "Utilisateurs suivis uniquement" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "Followers" + +#: src/view/com/profile/ProfileHeader.tsx:624 +msgid "following" +msgstr "suivi" + +#: src/view/com/profile/ProfileHeader.tsx:522 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "Suivi" + +#: src/view/com/profile/ProfileHeader.tsx:571 +msgid "Follows you" +msgstr "Vous suit" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "Pour des raisons de sécurité, nous devrons envoyer un code de confirmation à votre e-mail." + +#: 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 "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:231 +msgid "Forgot" +msgstr "Oublié" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "Mot de passe oublié" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "Mot de passe oublié" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "Galerie" + +#: src/view/com/modals/VerifyEmail.tsx:183 +msgid "Get Started" +msgstr "C’est parti" + +#: 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 "Retour" + +#: src/view/screens/ProfileFeed.tsx:103 +#: src/view/screens/ProfileFeed.tsx:108 +#: src/view/screens/ProfileList.tsx:839 +#: src/view/screens/ProfileList.tsx:844 +msgid "Go Back" +msgstr "Retour" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "Aller à la suite" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "Pseudo" + +#: src/view/shell/desktop/RightNav.tsx:94 +#: src/view/shell/Drawer.tsx:321 +msgid "Help" +msgstr "Aide" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "Voici le mot de passe de votre appli." + +#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Masquer" + +#: 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:308 +msgid "Hide user list" +msgstr "Masquer 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." +msgstr "Hmm, un problème s’est produit avec le serveur de fils d’actu. Veuillez informer le propriétaire du fil d’actu de ce problème." + +#: 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, le serveur du fils d’actu semble être mal configuré. Veuillez informer le propriétaire du fil d’actu de ce problème." + +#: 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." + +#: 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." + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "Hmm, nous n’arrivons pas à trouver ce fils d’actu. Il a peut-être été supprimé." + +#: src/view/shell/bottom-bar/BottomBar.tsx:137 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "Accueil" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "Préférences de fils d’actu de l’accueil" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "Fournisseur d’hébergement" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "Adresse de l’hébergeur" + +#: src/view/com/modals/VerifyEmail.tsx:208 +msgid "I have a code" +msgstr "J’ai un code" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "J’ai mon propre domaine" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "Si rien n’est sélectionné, il n’y a pas de restriction d’âge." + +#: src/view/com/modals/AltImage.tsx:97 +msgid "Image alt text" +msgstr "Texte alt de l’image" + +#: src/view/com/util/UserAvatar.tsx:308 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "Options d’images" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "Nom d’utilisateur ou mot de passe incorrect" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "Inviter" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "Inviter un ami" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "Code d’invitation" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "Code d’invitation refusé. Vérifiez que vous l’avez saisi correctement et réessayez." + +#: src/view/shell/Drawer.tsx:640 +msgid "Invite codes: {invitesAvailable} available" +msgstr "Codes d’invitation : {invitesAvailable} disponible" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:99 +msgid "Jobs" +msgstr "Emplois" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "S’inscrire sur la liste d’attente" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "S’inscrire sur la liste d’attente." + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "S’inscrire sur la liste d’attente" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "Sélection de la langue" + +#: src/view/screens/LanguageSettings.tsx:89 +msgid "Language Settings" +msgstr "Paramètres linguistiques" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "Langues" + +#: src/view/com/util/moderation/ContentHider.tsx:101 +msgid "Learn more" +msgstr "En savoir plus" + +#: 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 "En savoir plus" + +#: 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 "En savoir plus sur cet avertissement" + +#: src/view/screens/Moderation.tsx:242 +msgid "Learn more about what is public on Bluesky." +msgstr "En savoir plus sur ce qui est public sur Bluesky." + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "Si vous ne cochez rien, toutes les langues s’afficheront." + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "Quitter 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 "Réinitialisez votre mot de passe !" + +#: src/view/com/util/UserAvatar.tsx:245 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "Bibliothèque" + +#: src/view/screens/ProfileFeed.tsx:577 +msgid "Like this feed" +msgstr "Likez ce fils d’actu" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "Liké par" + +#: src/view/screens/Profile.tsx:164 +msgid "Likes" +msgstr "Likes" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "Liste des avatars" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "Nom de liste" + +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "Listes" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "Charger plus d’articles" + +#: src/view/screens/Notifications.tsx:144 +msgid "Load new notifications" +msgstr "Charger les nouvelles notifications" + +#: src/view/com/feeds/FeedPage.tsx:189 +msgid "Load new posts" +msgstr "Charger les nouveaux messages" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "Chargement..." + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "Serveur de dév local" + +#: src/view/screens/Moderation.tsx:136 +msgid "Logged-out visibility" +msgstr "Visibilité déconnectée" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +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 !" + +#: src/view/screens/Profile.tsx:163 +msgid "Media" +msgstr "Média" + +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "utilisateurs mentionnés" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "Utilisateurs mentionnés" + +#: src/view/screens/Search/Search.tsx:529 +msgid "Menu" +msgstr "Menu" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +msgid "Message from server" +msgstr "Message du serveur" + +#: src/view/screens/Moderation.tsx:64 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 +msgid "Moderation" +msgstr "Modération" + +#: src/view/screens/Moderation.tsx:95 +msgid "Moderation lists" +msgstr "Listes de modération" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "Listes de modération" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "Plus de fils d’actu" + +#: src/view/com/profile/ProfileHeader.tsx:548 +#: src/view/screens/ProfileFeed.tsx:360 +#: src/view/screens/ProfileList.tsx:583 +msgid "More options" +msgstr "Plus d’options" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Compte en sourdine" + +#: src/view/screens/ProfileList.tsx:510 +msgid "Mute accounts" +msgstr "Comptes en sourdine" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Mute list" +msgstr "Mettre en sourdine" + +#: src/view/screens/ProfileList.tsx:270 +msgid "Mute these accounts?" +msgstr "Mettre ces comptes en sourdine ?" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Mute thread" +msgstr "Mettre fil en sourdine" + +#: src/view/screens/Moderation.tsx:109 +msgid "Muted accounts" +msgstr "Comptes en sourdine" + +#: src/view/screens/ModerationMutedAccounts.tsx:107 +msgid "Muted Accounts" +msgstr "Comptes en sourdine" + +#: 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." + +#: src/view/screens/ProfileList.tsx:272 +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." + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "Ma date de naissance" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "Mes fils d’actu" + +#: src/view/shell/desktop/LeftNav.tsx:65 +msgid "My Profile" +msgstr "Mon profil" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "Mes fils d’actu enregistrés" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "Nom" + +#: 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." + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "Nouveau" + +#: src/view/com/feeds/FeedPage.tsx:200 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:430 +#: src/view/screens/ProfileList.tsx:193 +#: src/view/screens/ProfileList.tsx:221 +#: src/view/shell/desktop/LeftNav.tsx:247 +msgid "New post" +msgstr "Nouvelle publication" + +#: src/view/shell/desktop/LeftNav.tsx:257 +msgid "New Post" +msgstr "Nouvelle publication" + +#: 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:281 +#: 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 "Suivant" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "Image suivante" + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "Non" + +#: src/view/screens/ProfileFeed.tsx:570 +#: src/view/screens/ProfileList.tsx:711 +msgid "No description" +msgstr "Aucune description" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "Aucun résultat" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "Aucun résultat trouvé pour \"{query}\"" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "Aucun résultat trouvé pour {query}" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "Personne" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "Sans objet." + +#: 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 "Remarque : Bluesky est un réseau ouvert et public. Ce paramètre limite uniquement la visibilité de votre contenu sur l’application et le site Web de Bluesky, et d’autres applications peuvent ne pas respecter ce paramètre. Votre contenu peut toujours être montré aux utilisateurs déconnectés par d’autres applications et sites Web." + +#: src/view/screens/Notifications.tsx:109 +#: src/view/screens/Notifications.tsx:133 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "Notifications" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "Oh non !" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "D’accord" + +#: src/view/com/composer/Composer.tsx:358 +msgid "One or more images is missing alt text." +msgstr "Une ou plusieurs images n’ont pas de texte alt." + +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "Seul {0} peut répondre." + +#: src/view/com/pager/FeedsTabBarMobile.tsx:76 +msgid "Open navigation" +msgstr "Navigation ouverte" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "Ouvre les paramètres linguistiques configurables" + +#: src/view/shell/desktop/RightNav.tsx:148 +#: src/view/shell/Drawer.tsx:641 +msgid "Opens list of invite codes" +msgstr "Ouvre la liste des codes d’invitation" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "Ouvre une fenêtre modale pour utiliser un domaine personnalisé" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "Ouvre les paramètres de modération" + +#: src/view/screens/Settings.tsx:514 +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 +msgid "Opens the app password settings page" +msgstr "Ouvre la page de configuration du mot de passe" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "Ouvre les préférences du fil d’accueil" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "Ouvre la page de l’historique" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "Ouvre la page du journal système" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "Ouvre les préférences relatives aux fils de discussion" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "Autre compte" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "Autre service" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "Autre..." + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "Page introuvable" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "Mot de passe" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "Mise à jour du mot de passe" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "Mot de passe mis à jour !" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "Images destinées aux adultes." + +#: src/view/screens/SavedFeeds.tsx:88 +msgid "Pinned Feeds" +msgstr "Fils épinglés" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "Veuillez choisir votre pseudo." + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "Veuillez choisir votre mot de passe." + +#: 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 "Veuillez confirmer votre e-mail avant de le modifier. Ceci est temporairement requis pendant que des outils de mise à jour d’e-mail sont ajoutés, cette étape ne sera bientôt plus nécessaire." + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "Veuillez saisir un nom unique pour le mot de passe de l’application ou utiliser celui que nous avons généré de manière aléatoire." + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "Veuillez entrer votre e-mail." + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +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 "" + +#: 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 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 +#: src/view/screens/PostThread.tsx:80 +msgid "Post" +msgstr "Publication" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "Post hidden" +msgstr "Publications cachées" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "Langue de publication" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "Langues de publication" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "Post not found" +msgstr "Publication introuvable" + +#: src/view/screens/Profile.tsx:161 +msgid "Posts" +msgstr "Publications" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "Lien potentiellement trompeur" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "Image précédente" + +#: src/view/screens/LanguageSettings.tsx:187 +msgid "Primary Language" +msgstr "Langue principale" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "Définissez des priorités de vos suivis" + +#: src/view/shell/desktop/RightNav.tsx:76 +msgid "Privacy" +msgstr "Vie privée" + +#: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: 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..." + +#: src/view/shell/bottom-bar/BottomBar.tsx:247 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "Profil" + +#: src/view/screens/Settings.tsx:808 +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." + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "Les listes publiques et partageables qui peuvent alimenter les fils d’actu." + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "Citer une publication" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "Citer une publication" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "Ratios" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "Fils d’actu recommandés" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "Utilisateurs recommandés" + +#: 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 "Supprimer" + +#: src/view/com/feeds/FeedSourceCard.tsx:106 +msgid "Remove {0} from my feeds?" +msgstr "Supprimer {0} de mes fils d’actu ?" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "Supprimer compte" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "Supprimer fil d’actu" + +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 +#: src/view/screens/ProfileFeed.tsx:270 +msgid "Remove from my feeds" +msgstr "Supprimer de mes fils d’actu" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "Supprimer image" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "Supprimer aperçu d’image" + +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "Supprimer ce fils 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 ?" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "Supprimé de la liste" + +#: src/view/screens/Profile.tsx:162 +msgid "Replies" +msgstr "Réponses" + +#: src/view/com/threadgate/WhoCanReply.tsx:98 +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 +msgid "Reply Filters" +msgstr "Filtres de réponse" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "Signaler {collectionName}" + +#: src/view/com/profile/ProfileHeader.tsx:404 +msgid "Report Account" +msgstr "Signaler Compte" + +#: src/view/screens/ProfileFeed.tsx:290 +msgid "Report feed" +msgstr "Signaler fil d’actu" + +#: src/view/screens/ProfileList.tsx:425 +msgid "Report List" +msgstr "Signaler Liste" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 +msgid "Report post" +msgstr "Signaler publication" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "Republier" + +#: 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 "Republier ou citer" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "Republié par" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "Demande de modification" + +#: src/view/com/auth/create/Step2.tsx:53 +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" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "Réinitialisation de l’état d’accueil" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "Réinitialiser mot de passe" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "Réinitialiser l’état des préférences" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "Réinitialise l’état d’accueil" + +#: src/view/screens/Settings.tsx:674 +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:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: 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:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: 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 "Enregistrer" + +#: src/view/com/modals/AltImage.tsx:106 +msgid "Save alt text" +msgstr "Enregistrer texte alt" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "Enregistrer modifications" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "Enregistrer le changement de pseudo" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "Enregistrer le recadrage de l’image" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "Fils d’actu enregistrés" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:322 +#: 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 "Recherche" + +#: 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 "Étape de sécurité requise" + +#: src/view/com/auth/HomeLoggedOutCTA.tsx:39 +msgid "See what's next" +msgstr "Voir la suite" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "Sélectionner Bluesky Social" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "Sélectionner un compte existant" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "Sélectionner un service" + +#: 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 "Sélectionnez les langues que vous souhaitez voir figurer dans les fils d’actu auxquels vous êtes abonné. Si aucune langue n’est sélectionnée, toutes les langues seront affichées." + +#: src/view/screens/LanguageSettings.tsx:98 +msgid "Select your app language for the default text to display in the app" +msgstr "Sélectionnez la langue de votre application à afficher par défaut" + +#: src/view/screens/LanguageSettings.tsx:190 +msgid "Select your preferred language for translations in your feed." +msgstr "Sélectionnez votre langue préférée pour traduire votre fils d’actu." + +#: src/view/com/modals/VerifyEmail.tsx:196 +msgid "Send Confirmation Email" +msgstr "Envoyer un e-mail de confirmation" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "Envoyer e-mail" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "Envoyer e-mail" + +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 +msgid "Send feedback" +msgstr "Envoyer commentaire" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "Envoyer 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 +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." + +#: src/view/screens/PreferencesHomeFeed.tsx:113 +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." + +#: src/view/screens/PreferencesHomeFeed.tsx:182 +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." + +#: src/view/screens/PreferencesThreads.tsx:116 +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 +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." + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 +msgid "Settings" +msgstr "Paramètres" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "Activité sexuelle ou nudité érotique." + +#: src/view/com/profile/ProfileHeader.tsx:338 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:384 +msgid "Share" +msgstr "Partager" + +#: src/view/screens/ProfileFeed.tsx:302 +msgid "Share feed" +msgstr "Partager fils d’actu" + +#: src/view/com/util/moderation/ContentHider.tsx:105 +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "Afficher" + +#: src/view/com/util/moderation/ScreenHider.tsx:132 +msgid "Show anyway" +msgstr "Afficher quand même" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "Afficher les Publications de Mes fils d’actu" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "Afficher les Publications de citation" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "Afficher réponses" + +#: src/view/screens/PreferencesThreads.tsx:94 +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 +msgid "Show Reposts" +msgstr "Afficher les republications" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "Afficher les utilisateurs" + +#: 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 "Connexion" + +#: 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 "Connexion" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +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..." + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "Se connecter à " + +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 +msgid "Sign out" +msgstr "Déconnexion" + +#: 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 "S’inscrire" + +#: src/view/shell/NavSignupCard.tsx:42 +msgid "Sign up or sign in to join the conversation" +msgstr "S’inscrire ou se connecter pour participer à la conversation" + +#: src/view/com/util/moderation/ScreenHider.tsx:76 +msgid "Sign-in Required" +msgstr "Connexion requise" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "Connecté en tant que" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "Ignorer" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "Trier 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 :" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "Carré" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "Mise en scène" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "Page de statut" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "Historique" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr "Envoyer" + +#: src/view/screens/ProfileList.tsx:574 +msgid "Subscribe" +msgstr "S’abonner" + +#: src/view/screens/ProfileList.tsx:570 +msgid "Subscribe to this list" +msgstr "S’abonner à cette liste" + +#: src/view/screens/Search/Search.tsx:349 +msgid "Suggested Follows" +msgstr "Suivis suggérés" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "Soutien" + +#: src/view/com/modals/SwitchAccount.tsx:115 +msgid "Switch Account" +msgstr "Changer de compte" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "Journal système" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "Grand" + +#: src/view/shell/desktop/RightNav.tsx:85 +msgid "Terms" +msgstr "Conditions générales" + +#: src/view/screens/Settings.tsx:744 +#: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 +msgid "Terms of Service" +msgstr "Conditions d’utilisation" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "Champ de saisie de texte" + +#: src/view/com/profile/ProfileHeader.tsx:306 +msgid "The account will be able to interact with you after unblocking." +msgstr "Ce compte pourra interagir avec vous après le déblocage." + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "Les lignes directrices communautaires ont été déplacées vers <0/>" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +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." + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +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." + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "Nos conditions d’utilisation ont été déplacées vers" + +#: 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 "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é." + +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "This {screenDescription} has been flagged:" +msgstr "Ce {screenDescription} a été signalé :" + +#: src/view/com/util/moderation/ScreenHider.tsx:83 +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/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." + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "Ce fil d’actu reçoit actuellement un trafic important, il est temporairement indisponible. Veuillez réessayer plus tard." + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "Ces informations ne sont pas partagées avec d’autres utilisateurs." + +#: 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 "Ceci est important au cas où vous auriez besoin de changer d’e-mail ou de réinitialiser votre mot de passe." + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "C’est le service qui vous permet de rester en ligne." + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +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." + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "Cet avertissement n’est disponible que pour les messages contenant des médias." + +#: 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 "Préférences des fils de discussion" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "Mode arborescent" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "Basculer menu déroulant" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "Transformations" + +#: src/view/com/post-thread/PostThreadItem.tsx:704 +#: src/view/com/post-thread/PostThreadItem.tsx:706 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 +msgid "Translate" +msgstr "Traduire" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "Réessayer" + +#: src/view/screens/ProfileList.tsx:472 +msgid "Un-block list" +msgstr "Débloquer liste" + +#: src/view/screens/ProfileList.tsx:457 +msgid "Un-mute list" +msgstr "Désactiver sourdine sur cette liste" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "Impossible de contacter votre service. Veuillez vérifier votre connexion Internet." + +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 +msgid "Unblock" +msgstr "Débloquer" + +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 +msgid "Unblock Account" +msgstr "Débloquer compte" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "Annuler transfert" + +#: src/view/com/auth/create/state.ts:210 +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" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 +msgid "Unmute thread" +msgstr "Désactiver sourdine sur ce fil de discussion" + +#: src/view/screens/ProfileList.tsx:440 +msgid "Unpin moderation list" +msgstr "Supprimer la liste de modération" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "Mise à jour de {displayName} dans les listes" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "Mise à jour disponible" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "Mise à jour..." + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "Télécharger un fichier texte vers :" + +#: 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 "Utiliser les mots de passe de l’appli pour se connecter à d’autres clients Bluesky sans donner un accès complet à votre compte ou à votre mot de passe." + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "Utiliser le fournisseur par défaut" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "Utilisez-le pour vous connecter à l’autre application avec votre identifiant." + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "Utilisé par :" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "Pseudo utilisateur" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "Listes d’utilisateurs" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "Nom d’utilisateur ou e-mail" + +#: src/view/screens/ProfileList.tsx:738 +msgid "Users" +msgstr "Utilisateurs" + +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "utilisateurs suivis par <0/>" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "Utilisateurs dans \"{0}\"" + +#: src/view/screens/Settings.tsx:769 +msgid "Verify email" +msgstr "Confirmer e-mail" + +#: src/view/screens/Settings.tsx:794 +msgid "Verify my email" +msgstr "Confirmer mon e-mail" + +#: src/view/screens/Settings.tsx:803 +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" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "Afficher l’entrée de débogage" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "Afficher avatar" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "Visiter le site" + +#: src/view/com/auth/create/CreateAccount.tsx:121 +msgid "We're so excited to have you join us!" +msgstr "Nous sommes ravis de vous accueillir !" + +#: src/view/screens/Search/Search.tsx:236 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "Nous sommes désolés, mais votre recherche a été annulée. Veuillez réessayer dans quelques minutes." + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "Nous sommes désolés ! La page que vous recherchez est introuvable." + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky</0>" +msgstr "Bienvenue sur <0>Bluesky</0>" + +#: src/view/com/modals/report/Modal.tsx:169 +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 "" + +#: 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 ?" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "Quelles langues aimeriez-vous voir apparaître dans vos flux algorithmiques ?" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "Qui peut répondre ?" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "Large" + +#: src/view/com/composer/Composer.tsx:413 +msgid "Write post" +msgstr "Rédiger une publication" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "Rédigez votre réponse" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "Oui" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "Vous pouvez changer d’hébergeur à tout moment." + +#: 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 "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe." + +#: 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 "Vous n’avez encore aucun code d’invitation ! Nous vous en enverrons lorsque vous serez sur Bluesky depuis un peu plus longtemps." + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "Vous n’avez encore aucun fil épinglé." + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "Vous n’avez encore aucun fil enregistré !" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +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é." + +#: src/view/com/feeds/ProfileFeedgens.tsx:134 +msgid "You have no feeds." +msgstr "Vous n’avez aucun fil." + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:138 +msgid "You have no lists." +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." + +#: 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 "Vous n’avez encore créé aucun mot de passe pour l’appli. Vous pouvez en créer un en cliquant sur le bouton suivant." + +#: 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." + +#: 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 "Vous recevrez un e-mail contenant un « code de réinitialisation » Saisissez ce code ici, puis votre nouveau mot de passe." + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "Votre compte" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "Votre date de naissance" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "Votre e-mail semble être invalide." + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "Votre e-mail a été enregistré ! Nous vous contacterons bientôt." + +#: 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 "Votre e-mail a été mis à jour, mais n’a pas été vérifié. L’étape suivante consiste à vérifier votre nouvel e-mail." + +#: 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 "Votre e-mail n’a pas encore été vérifié. Il s’agit d’une mesure de sécurité importante que nous recommandons." + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "Votre nom complet sera" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "Votre fournisseur d’hébergement" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:129 +#: src/view/shell/Drawer.tsx:655 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "Vos codes d’invitation sont cachés lorsque vous êtes connecté à l’aide d’un mot de passe d’application." + +#: 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." + +#: src/view/com/modals/SwitchAccount.tsx:82 +msgid "Your profile" +msgstr "Votre profil" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "Votre pseudo" diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index d45512147..6fa32b369 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -38,16 +38,16 @@ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite msgstr "" #: src/view/screens/Settings.tsx:407 -#: src/view/shell/Drawer.tsx:640 +#: src/view/shell/Drawer.tsx:659 msgid "{invitesAvailable} invite code available" msgstr "" #: src/view/screens/Settings.tsx:409 -#: src/view/shell/Drawer.tsx:642 +#: src/view/shell/Drawer.tsx:661 msgid "{invitesAvailable} invite codes available" msgstr "" -#: src/view/screens/Search/Search.tsx:88 +#: src/view/screens/Search/Search.tsx:87 msgid "{message}" msgstr "" @@ -130,11 +130,11 @@ msgstr "विवरण जोड़ें" msgid "Add details to report" msgstr "रिपोरà¥à¤Ÿ करने के लिठविवरण जोड़ें" -#: src/view/com/composer/Composer.tsx:438 +#: src/view/com/composer/Composer.tsx:442 msgid "Add link card" msgstr "लिंक कारà¥à¤¡ जोड़ें" -#: src/view/com/composer/Composer.tsx:441 +#: src/view/com/composer/Composer.tsx:445 msgid "Add link card:" msgstr "लिंक कारà¥à¤¡ जोड़ें:" @@ -204,7 +204,7 @@ msgstr "à¤à¤ª पासवरà¥à¤¡" msgid "App Passwords" msgstr "à¤à¤ª पासवरà¥à¤¡" -#: src/view/com/util/forms/PostDropdownBtn.tsx:207 +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 msgid "Appeal content warning" msgstr "" @@ -244,7 +244,7 @@ msgstr "कà¥à¤¯à¤¾ आप वाकई इस डà¥à¤°à¤¾à¤«à¥à¤Ÿ को ह msgid "Are you sure?" msgstr "कà¥à¤¯à¤¾ आप वासà¥à¤¤à¤µ में इसे करना चाहते हैं?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:190 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "कà¥à¤¯à¤¾ आप वासà¥à¤¤à¤µ में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।" @@ -262,9 +262,9 @@ msgstr "कलातà¥à¤®à¤• या गैर-कामà¥à¤• नगà¥à¤¨à¤¤à¤ #: src/view/com/auth/login/LoginForm.tsx:249 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:45 -#: src/view/com/post-thread/PostThread.tsx:395 -#: src/view/com/post-thread/PostThread.tsx:445 -#: src/view/com/post-thread/PostThread.tsx:453 +#: 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 "वापस" @@ -303,7 +303,7 @@ msgstr "खाता बà¥à¤²à¥‰à¤• करें?" msgid "Blocked accounts" msgstr "बà¥à¤²à¥‰à¤• किठगठखाते" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "बà¥à¤²à¥‰à¤• किठगठखाते" @@ -311,11 +311,11 @@ msgstr "बà¥à¤²à¥‰à¤• किठगठखाते" msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "अवरà¥à¤¦à¥à¤§ खाते आपके थà¥à¤°à¥‡à¤¡à¥à¤¸ में उतà¥à¤¤à¤° नहीं दे सकते, आपका उलà¥à¤²à¥‡à¤– नहीं कर सकते, या अनà¥à¤¯à¤¥à¤¾ आपके साथ बातचीत नहीं कर सकते।" -#: src/view/screens/ModerationBlockedAccounts.tsx:114 +#: 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:251 +#: src/view/com/post-thread/PostThread.tsx:250 msgid "Blocked post." msgstr "बà¥à¤²à¥‰à¤• पोसà¥à¤Ÿà¥¤" @@ -373,9 +373,9 @@ 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:285 -#: src/view/com/composer/Composer.tsx:288 -#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/composer/Composer.tsx:289 +#: src/view/com/composer/Composer.tsx:292 +#: src/view/com/modals/AltImage.tsx:128 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -388,7 +388,7 @@ msgstr "केवल अकà¥à¤·à¤°, संखà¥à¤¯à¤¾, रिकà¥à¤¤ सॠ#: 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:592 +#: src/view/screens/Search/Search.tsx:584 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "कैंसिल" @@ -398,7 +398,7 @@ msgstr "कैंसिल" msgid "Cancel account deletion" msgstr "अकाउंट बंद मत करो" -#: src/view/com/modals/AltImage.tsx:122 +#: src/view/com/modals/AltImage.tsx:123 msgid "Cancel add image alt text" msgstr "ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ मत जोड़ें" @@ -489,7 +489,7 @@ msgid "Clear all storage data (restart after this)" msgstr "" #: src/view/com/util/forms/SearchInput.tsx:73 -#: src/view/screens/Search/Search.tsx:577 +#: src/view/screens/Search/Search.tsx:569 msgid "Clear search query" msgstr "खोज कà¥à¤µà¥‡à¤°à¥€ साफ़ करें" @@ -593,7 +593,7 @@ msgstr "कॉपी" msgid "Copy link to list" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "" @@ -601,7 +601,7 @@ msgstr "" msgid "Copy link to profile" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:117 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "पोसà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ कॉपी करें" @@ -674,15 +674,15 @@ msgstr "मेरा खाता हटाà¤à¤‚" msgid "Delete my account…" msgstr "मेरा खाता हटाà¤à¤‚…" -#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "पोसà¥à¤Ÿ को हटाà¤à¤‚" -#: src/view/com/util/forms/PostDropdownBtn.tsx:189 +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 msgid "Delete this post?" msgstr "इस पोसà¥à¤Ÿ को डीलीट करें?" -#: src/view/com/post-thread/PostThread.tsx:243 +#: src/view/com/post-thread/PostThread.tsx:242 msgid "Deleted post." msgstr "यह पोसà¥à¤Ÿ मिटाई जा चà¥à¤•ी है" @@ -701,6 +701,10 @@ msgstr "देव सरà¥à¤µà¤°" msgid "Developer Tools" msgstr "डेवलपर उपकरण" +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + #: src/view/com/composer/Composer.tsx:143 msgid "Discard" msgstr "" @@ -805,7 +809,7 @@ msgstr "ईमेल:" msgid "Enable this setting to only see replies between people you follow." msgstr "इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सकà¥à¤·à¤® करें जिनà¥à¤¹à¥‡à¤‚ आप फॉलो करते हैं।।" -#: src/view/screens/Profile.tsx:425 +#: src/view/screens/Profile.tsx:426 msgid "End of feed" msgstr "" @@ -833,7 +837,7 @@ msgstr "नीचे अपना नया ईमेल पता दरà¥à¤œ msgid "Enter your username and password" msgstr "अपने यूज़रनेम और पासवरà¥à¤¡ दरà¥à¤œ करें" -#: src/view/screens/Search/Search.tsx:106 +#: src/view/screens/Search/Search.tsx:105 msgid "Error:" msgstr "" @@ -850,7 +854,7 @@ msgstr "ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ" msgid "Failed to load recommended feeds" msgstr "अनà¥à¤¶à¤‚सित फ़ीड लोड करने में विफल" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:554 msgid "Feed offline" msgstr "फ़ीड ऑफ़लाइन है" @@ -859,16 +863,16 @@ msgid "Feed Preferences" msgstr "फ़ीड पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ता" #: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx:164 +#: src/view/screens/Profile.tsx:165 #: src/view/shell/bottom-bar/BottomBar.tsx:181 -#: src/view/shell/desktop/LeftNav.tsx:339 -#: src/view/shell/Drawer.tsx:455 -#: src/view/shell/Drawer.tsx:456 +#: src/view/shell/desktop/LeftNav.tsx:340 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "सà¤à¥€ फ़ीड" @@ -880,11 +884,11 @@ msgstr "सामगà¥à¤°à¥€ को वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ करने ठ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:422 +#: src/view/screens/Search/Search.tsx:414 msgid "Find users on Bluesky" msgstr "" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:412 msgid "Find users with the search tool on the right" msgstr "" @@ -965,7 +969,7 @@ 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:103 +#: src/view/shell/desktop/LeftNav.tsx:104 msgid "Go back" msgstr "वापस जाओ" @@ -987,7 +991,7 @@ msgid "Handle" msgstr "हैंडल" #: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "सहायता" @@ -1000,6 +1004,14 @@ msgstr "यहां आपका à¤à¤ª पासवरà¥à¤¡ है." 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:308 msgid "Hide user list" msgstr "उपयोगकरà¥à¤¤à¤¾ सूची छà¥à¤ªà¤¾à¤à¤" @@ -1033,9 +1045,9 @@ msgstr "" #~ msgstr "" #: src/view/shell/bottom-bar/BottomBar.tsx:137 -#: src/view/shell/desktop/LeftNav.tsx:303 -#: src/view/shell/Drawer.tsx:379 -#: src/view/shell/Drawer.tsx:380 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "होम फीड" @@ -1066,7 +1078,7 @@ msgstr "मेरे पास अपना डोमेन है" msgid "If none are selected, suitable for all ages." msgstr "यदि किसी को चà¥à¤¨à¤¾ जाता है, तो सà¤à¥€ उमà¥à¤° के लिठउपयà¥à¤•à¥à¤¤ है।।" -#: src/view/com/modals/AltImage.tsx:96 +#: src/view/com/modals/AltImage.tsx:97 msgid "Image alt text" msgstr "छवि alt पाठ" @@ -1101,7 +1113,7 @@ msgstr "आमंतà¥à¤°à¤£ कोड" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/view/shell/Drawer.tsx:621 +#: src/view/shell/Drawer.tsx:640 msgid "Invite codes: {invitesAvailable} available" msgstr "" @@ -1187,7 +1199,7 @@ msgstr "इस फ़ीड को लाइक करो" msgid "Liked by" msgstr "इन यूजर ने लाइक किया है" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "" @@ -1207,15 +1219,15 @@ msgstr "सूची अवतार" msgid "List Name" msgstr "सूची का नाम" -#: src/view/screens/Profile.tsx:165 -#: src/view/shell/desktop/LeftNav.tsx:376 -#: src/view/shell/Drawer.tsx:471 -#: src/view/shell/Drawer.tsx:472 +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 msgid "Lists" msgstr "सूची" -#: src/view/com/post-thread/PostThread.tsx:260 -#: src/view/com/post-thread/PostThread.tsx:268 +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 msgid "Load more posts" msgstr "अधिक पोसà¥à¤Ÿ लोड करें" @@ -1255,7 +1267,7 @@ msgstr "उस खाते में लॉग इन करें जो सॠmsgid "Make sure this is where you intend to go!" msgstr "यह सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने के लिठकि आप कहाठजाना चाहते हैं!" -#: src/view/screens/Profile.tsx:162 +#: src/view/screens/Profile.tsx:163 msgid "Media" msgstr "" @@ -1267,7 +1279,7 @@ msgstr "" msgid "Mentioned users" msgstr "" -#: src/view/screens/Search/Search.tsx:537 +#: src/view/screens/Search/Search.tsx:529 msgid "Menu" msgstr "मेनू" @@ -1277,9 +1289,9 @@ msgstr "" #: src/view/screens/Moderation.tsx:64 #: src/view/screens/Settings.tsx:563 -#: src/view/shell/desktop/LeftNav.tsx:394 -#: src/view/shell/Drawer.tsx:490 -#: src/view/shell/Drawer.tsx:491 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "मॉडरेशन" @@ -1321,7 +1333,7 @@ msgstr "" msgid "Mute these accounts?" msgstr "इन खातों को मà¥à¤¯à¥‚ट करें?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" msgstr "थà¥à¤°à¥‡à¤¡ मà¥à¤¯à¥‚ट करें" @@ -1329,11 +1341,11 @@ msgstr "थà¥à¤°à¥‡à¤¡ मà¥à¤¯à¥‚ट करें" msgid "Muted accounts" msgstr "मà¥à¤¯à¥‚ट किठगठखाते" -#: src/view/screens/ModerationMutedAccounts.tsx:106 +#: src/view/screens/ModerationMutedAccounts.tsx:107 msgid "Muted Accounts" msgstr "मà¥à¤¯à¥‚ट किठगठखाते" -#: src/view/screens/ModerationMutedAccounts.tsx:114 +#: 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 "मà¥à¤¯à¥‚ट किठगठखातों की पोसà¥à¤Ÿ आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। मà¥à¤¯à¥‚ट पूरी तरह से निजी हैं." @@ -1353,7 +1365,7 @@ msgstr "जनà¥à¤®à¤¦à¤¿à¤¨" msgid "My Feeds" msgstr "मेरी फ़ीड" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "मेरी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²" @@ -1376,16 +1388,16 @@ msgid "New" msgstr "नया" #: src/view/com/feeds/FeedPage.tsx:200 -#: src/view/screens/Feeds.tsx:510 -#: src/view/screens/Profile.tsx:353 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 #: src/view/screens/ProfileFeed.tsx:430 #: src/view/screens/ProfileList.tsx:193 #: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/shell/desktop/LeftNav.tsx:247 msgid "New post" msgstr "नई पोसà¥à¤Ÿ" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:257 msgid "New Post" msgstr "नई पोसà¥à¤Ÿ" @@ -1428,9 +1440,9 @@ msgstr "\"{query}\" के लिठकोई परिणाम नहीं à #~ msgstr "{0} के लिठकोई परिणाम नहीं मिला" #: src/view/com/modals/ListAddRemoveUsers.tsx:127 -#: src/view/screens/Search/Search.tsx:271 -#: src/view/screens/Search/Search.tsx:299 -#: src/view/screens/Search/Search.tsx:615 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "" @@ -1462,9 +1474,9 @@ msgstr "" #: src/view/screens/Notifications.tsx:109 #: src/view/screens/Notifications.tsx:133 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "सूचनाà¤à¤‚" @@ -1476,7 +1488,7 @@ msgstr "अरे नहीं!" msgid "Okay" msgstr "ठीक है" -#: src/view/com/composer/Composer.tsx:354 +#: src/view/com/composer/Composer.tsx:358 msgid "One or more images is missing alt text." msgstr "à¤à¤• या अधिक छवियाठalt पाठयाद आती हैं।।" @@ -1493,7 +1505,7 @@ msgid "Opens configurable language settings" msgstr "à¤à¤¾à¤·à¤¾ सेटिंगà¥à¤¸ खोलें" #: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "" @@ -1604,13 +1616,17 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/composer/Composer.tsx:214 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" msgstr "पोसà¥à¤Ÿ" -#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:378 msgid "Post hidden" msgstr "छà¥à¤ªà¤¾ पोसà¥à¤Ÿ" @@ -1622,11 +1638,11 @@ msgstr "पोसà¥à¤Ÿ à¤à¤¾à¤·à¤¾" msgid "Post Languages" msgstr "पोसà¥à¤Ÿ à¤à¤¾à¤·à¤¾" -#: src/view/com/post-thread/PostThread.tsx:437 +#: src/view/com/post-thread/PostThread.tsx:430 msgid "Post not found" msgstr "पोसà¥à¤Ÿ नहीं मिला" -#: src/view/screens/Profile.tsx:160 +#: src/view/screens/Profile.tsx:161 msgid "Posts" msgstr "" @@ -1651,6 +1667,8 @@ msgid "Privacy" msgstr "गोपनीयता" #: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "गोपनीयता नीति" @@ -1659,14 +1677,14 @@ msgid "Processing..." msgstr "पà¥à¤°à¤¸à¤‚सà¥à¤•रण..." #: src/view/shell/bottom-bar/BottomBar.tsx:247 -#: src/view/shell/desktop/LeftNav.tsx:412 -#: src/view/shell/Drawer.tsx:69 -#: src/view/shell/Drawer.tsx:525 -#: src/view/shell/Drawer.tsx:526 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: 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:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "अपने ईमेल को सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करके अपने खाते को सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखें।।" @@ -1751,7 +1769,7 @@ msgstr "इस फ़ीड को सहेजे गठफ़ीड से ठmsgid "Removed from list" msgstr "" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "" @@ -1780,7 +1798,7 @@ msgid "Report List" msgstr "रिपोरà¥à¤Ÿ सूची" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:167 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "रिपोरà¥à¤Ÿ पोसà¥à¤Ÿ" @@ -1851,7 +1869,7 @@ msgstr "फिर से कोशिश करो" #~ msgid "Retry change handle" #~ msgstr "हैंडल बदलना फिर से कोशिश करो" -#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:93 #: src/view/com/modals/BirthDateSettings.tsx:96 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1861,7 +1879,7 @@ msgstr "फिर से कोशिश करो" msgid "Save" msgstr "सेव करो" -#: src/view/com/modals/AltImage.tsx:105 +#: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" msgstr "सेव ऑलà¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ" @@ -1887,14 +1905,14 @@ msgstr "सहेजे गठफ़ीड" #: src/view/com/modals/ListAddRemoveUsers.tsx:75 #: src/view/com/util/forms/SearchInput.tsx:64 -#: src/view/screens/Search/Search.tsx:401 -#: src/view/screens/Search/Search.tsx:567 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:322 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "खोज" @@ -1951,8 +1969,8 @@ msgstr "ईमेल à¤à¥‡à¤œà¥‡à¤‚" msgid "Send Email" msgstr "ईमेल à¤à¥‡à¤œà¥‡à¤‚" -#: src/view/shell/Drawer.tsx:276 -#: src/view/shell/Drawer.tsx:297 +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 msgid "Send feedback" msgstr "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ à¤à¥‡à¤œà¥‡à¤‚" @@ -1985,9 +2003,9 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f msgstr "इस सेटिंग को अपने निमà¥à¤¨à¤²à¤¿à¤–ित फ़ीड में अपने सहेजे गठफ़ीड के नमूने दिखाने के लिठ\"हाà¤\" पर सेट करें। यह à¤à¤• पà¥à¤°à¤¯à¥‹à¤—ातà¥à¤®à¤• विशेषता है।।" #: src/view/screens/Settings.tsx:277 -#: src/view/shell/desktop/LeftNav.tsx:430 -#: src/view/shell/Drawer.tsx:546 -#: src/view/shell/Drawer.tsx:547 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "सेटिंगà¥à¤¸" @@ -1996,7 +2014,7 @@ msgid "Sexual activity or erotic nudity." msgstr "यौन गतिविधि या कामà¥à¤• नगà¥à¤¨à¤¤à¤¾à¥¤à¥¤" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 #: src/view/screens/ProfileList.tsx:384 msgid "Share" msgstr "शेयर" @@ -2145,7 +2163,7 @@ msgstr "सबà¥à¤¸à¤•à¥à¤°à¤¾à¤‡à¤¬" msgid "Subscribe to this list" msgstr "इस सूची को सबà¥à¤¸à¤•à¥à¤°à¤¾à¤‡à¤¬ करें" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:349 msgid "Suggested Follows" msgstr "अनà¥à¤¶à¤‚सित लोग" @@ -2174,7 +2192,9 @@ msgstr "लंबा" msgid "Terms" msgstr "शरà¥à¤¤à¥‡à¤‚" +#: src/view/screens/Settings.tsx:744 #: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" msgstr "सेवा की शरà¥à¤¤à¥‡à¤‚" @@ -2195,7 +2215,7 @@ msgstr "सामà¥à¤¦à¤¾à¤¯à¤¿à¤• दिशानिरà¥à¤¦à¥‡à¤¶à¥‹à¤‚ कà msgid "The Copyright Policy has been moved to <0/>" msgstr "कॉपीराइट नीति को <0/> पर सà¥à¤¥à¤¾à¤¨à¤¾à¤‚तरित कर दिया गया है" -#: src/view/com/post-thread/PostThread.tsx:440 +#: src/view/com/post-thread/PostThread.tsx:433 msgid "The post may have been deleted." msgstr "हो सकता है कि यह पोसà¥à¤Ÿ हटा दी गई हो।" @@ -2259,6 +2279,10 @@ msgstr "इस पोसà¥à¤Ÿ को हटा दिया गया है। 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" @@ -2278,7 +2302,7 @@ msgstr "परिवरà¥à¤¤à¤¨" #: src/view/com/post-thread/PostThreadItem.tsx:704 #: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/util/forms/PostDropdownBtn.tsx:103 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "अनà¥à¤µà¤¾à¤¦" @@ -2322,7 +2346,7 @@ msgstr "" msgid "Unmute Account" msgstr "अनमà¥à¤¯à¥‚ट खाता" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "थà¥à¤°à¥‡à¤¡ को अनमà¥à¤¯à¥‚ट करें" @@ -2391,15 +2415,15 @@ msgstr "" msgid "Users in \"{0}\"" msgstr "" -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:769 msgid "Verify email" msgstr "ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" -#: src/view/screens/Settings.tsx:775 +#: src/view/screens/Settings.tsx:794 msgid "Verify my email" msgstr "मेरी ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" -#: src/view/screens/Settings.tsx:784 +#: src/view/screens/Settings.tsx:803 msgid "Verify My Email" msgstr "मेरी ईमेल सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें" @@ -2432,7 +2456,7 @@ msgstr "हम आपके हमारी सेवा में शामिà #~ 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:238 +#: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2473,7 +2497,7 @@ msgstr "" msgid "Wide" msgstr "चौड़ा" -#: src/view/com/composer/Composer.tsx:409 +#: src/view/com/composer/Composer.tsx:413 msgid "Write post" msgstr "पोसà¥à¤Ÿ लिखो" @@ -2512,20 +2536,20 @@ msgstr "" msgid "You don't have any saved feeds." msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है." -#: src/view/com/post-thread/PostThread.tsx:388 +#: 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:141 +#: 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:145 +#: src/view/com/lists/ProfileLists.tsx:138 msgid "You have no lists." msgstr "आपके पास कोई सूची नहीं है।।" -#: src/view/screens/ModerationBlockedAccounts.tsx:131 +#: 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 "आपने अà¤à¥€ तक कोई à¤à¥€ अकाउंट बà¥à¤²à¥‰à¤• नहीं किया है. किसी खाते को बà¥à¤²à¥‰à¤• करने के लिà¤, उनकी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² पर जाà¤à¤‚ और उनके खाते के मेनू से \"खाता बà¥à¤²à¥‰à¤• करें\" चà¥à¤¨à¥‡à¤‚।" @@ -2533,7 +2557,7 @@ msgstr "आपने अà¤à¥€ तक कोई à¤à¥€ अकाउंट बॠmsgid "You have not created any app passwords yet. You can create one by pressing the button below." msgstr "आपने अà¤à¥€ तक कोई à¤à¤ª पासवरà¥à¤¡ नहीं बनाया है। आप नीचे बटन दबाकर à¤à¤• बना सकते हैं।।" -#: src/view/screens/ModerationMutedAccounts.tsx:130 +#: 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 "आपने अà¤à¥€ तक कोई खाता मà¥à¤¯à¥‚ट नहीं किया है. किसी खाते को मà¥à¤¯à¥‚ट करने के लिà¤, उनकी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² पर जाà¤à¤‚ और उनके खाते के मेनू से \"खाता मà¥à¤¯à¥‚ट करें\" चà¥à¤¨à¥‡à¤‚।" @@ -2576,7 +2600,7 @@ msgstr "आपका होसà¥à¤Ÿà¤¿à¤‚ग पà¥à¤°à¤¦à¤¾à¤¤à¤¾" #: src/view/screens/Settings.tsx:402 #: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po index 17d40dbe2..d4b2ce3bd 100644 --- a/src/locale/locales/ja/messages.po +++ b/src/locale/locales/ja/messages.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: \n" -"Last-Translator: Hima-Zinn\n" +"Last-Translator: noritada\n" "Language-Team: Hima-Zinn, tkusano, dolciss, oboenikui, noritada\n" "Plural-Forms: \n" @@ -30,16 +30,16 @@ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite msgstr "{invitesAvailable, plural, other {招待コード: # 個利用å¯èƒ½}}" #: src/view/screens/Settings.tsx:407 -#: src/view/shell/Drawer.tsx:640 +#: src/view/shell/Drawer.tsx:659 msgid "{invitesAvailable} invite code available" msgstr "{invitesAvailable}å€‹ã®æ‹›å¾…コードãŒåˆ©ç”¨å¯èƒ½" #: src/view/screens/Settings.tsx:409 -#: src/view/shell/Drawer.tsx:642 +#: src/view/shell/Drawer.tsx:661 msgid "{invitesAvailable} invite codes available" msgstr "{invitesAvailable}å€‹ã®æ‹›å¾…コードãŒåˆ©ç”¨å¯èƒ½" -#: src/view/screens/Search/Search.tsx:88 +#: src/view/screens/Search/Search.tsx:87 msgid "{message}" msgstr "{message}" @@ -110,11 +110,11 @@ msgstr "è©³ç´°ã‚’è¿½åŠ " msgid "Add details to report" msgstr "レãƒãƒ¼ãƒˆã«è©³ç´°ã‚’è¿½åŠ " -#: src/view/com/composer/Composer.tsx:438 +#: src/view/com/composer/Composer.tsx:442 msgid "Add link card" msgstr "ãƒªãƒ³ã‚¯ã‚«ãƒ¼ãƒ‰ã‚’è¿½åŠ " -#: src/view/com/composer/Composer.tsx:441 +#: src/view/com/composer/Composer.tsx:445 msgid "Add link card:" msgstr "ãƒªãƒ³ã‚¯ã‚«ãƒ¼ãƒ‰ã‚’è¿½åŠ ï¼š" @@ -184,7 +184,7 @@ msgstr "アプリパスワード" msgid "App Passwords" msgstr "アプリパスワード" -#: src/view/com/util/forms/PostDropdownBtn.tsx:207 +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 msgid "Appeal content warning" msgstr "" @@ -220,7 +220,7 @@ msgstr "本当ã«ã“ã®ä¸‹æ›¸ãã‚’ç ´æ£„ã—ã¾ã™ã‹ï¼Ÿ" msgid "Are you sure?" msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ" -#: src/view/com/util/forms/PostDropdownBtn.tsx:190 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿã“れã¯å…ƒã«æˆ»ã›ã¾ã›ã‚“。" @@ -234,9 +234,9 @@ msgstr "芸術的ã¾ãŸã¯æ€§çš„ã§ã¯ãªã„ヌード。" #: src/view/com/auth/login/LoginForm.tsx:249 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:45 -#: src/view/com/post-thread/PostThread.tsx:395 -#: src/view/com/post-thread/PostThread.tsx:445 -#: src/view/com/post-thread/PostThread.tsx:453 +#: 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 "戻る" @@ -275,7 +275,7 @@ msgstr "ã“れらã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ブãƒãƒƒã‚¯ã—ã¾ã™ã‹ï¼Ÿ" msgid "Blocked accounts" msgstr "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" @@ -283,11 +283,11 @@ msgstr "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã€ã‚ãªãŸã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã®è¿”ä¿¡ã€ã‚ãªãŸã¸ã®ãƒ¡ãƒ³ã‚·ãƒ§ãƒ³ã€ãã®ä»–ã®æ–¹æ³•ã§ã‚ãªãŸã¨ã‚„りå–りã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" -#: src/view/screens/ModerationBlockedAccounts.tsx:114 +#: 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:251 +#: src/view/com/post-thread/PostThread.tsx:250 msgid "Blocked post." msgstr "投稿をブãƒãƒƒã‚¯ã—ã¾ã—ãŸã€‚" @@ -345,9 +345,9 @@ 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:285 -#: src/view/com/composer/Composer.tsx:288 -#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/composer/Composer.tsx:289 +#: src/view/com/composer/Composer.tsx:292 +#: src/view/com/modals/AltImage.tsx:128 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 #: src/view/com/modals/Confirm.tsx:88 @@ -360,7 +360,7 @@ msgstr "æ–‡å—ã€æ•°å—ã€ã‚¹ãƒšãƒ¼ã‚¹ã€ãƒã‚¤ãƒ•ンã€ãŠã‚ˆã³ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ #: 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:592 +#: src/view/screens/Search/Search.tsx:584 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "ã‚ャンセル" @@ -370,7 +370,7 @@ msgstr "ã‚ャンセル" msgid "Cancel account deletion" msgstr "アカウントã®å‰Šé™¤ã‚’ã‚ャンセル" -#: src/view/com/modals/AltImage.tsx:122 +#: src/view/com/modals/AltImage.tsx:123 msgid "Cancel add image alt text" msgstr "ç”»åƒã®ALTテã‚ストã®è¿½åŠ ã‚’ã‚ャンセル" @@ -461,7 +461,7 @@ msgid "Clear all storage data (restart after this)" msgstr "ã™ã¹ã¦ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’クリア(ã“ã®å¾Œå†èµ·å‹•ã—ã¾ã™ï¼‰" #: src/view/com/util/forms/SearchInput.tsx:73 -#: src/view/screens/Search/Search.tsx:577 +#: src/view/screens/Search/Search.tsx:569 msgid "Clear search query" msgstr "検索クエリをクリア" @@ -565,7 +565,7 @@ msgstr "コピー" msgid "Copy link to list" msgstr "リストã¸ã®ãƒªãƒ³ã‚¯ã‚’コピー" -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "投稿ã¸ã®ãƒªãƒ³ã‚¯ã‚’コピー" @@ -573,7 +573,7 @@ msgstr "投稿ã¸ã®ãƒªãƒ³ã‚¯ã‚’コピー" msgid "Copy link to profile" msgstr "プãƒãƒ•ィールã¸ã®ãƒªãƒ³ã‚¯ã‚’コピー" -#: src/view/com/util/forms/PostDropdownBtn.tsx:117 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "投稿ã®ãƒ†ã‚ストをコピー" @@ -642,15 +642,15 @@ msgstr "マイアカウントを削除" msgid "Delete my account…" msgstr "マイアカウントを削除…" -#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "投稿を削除" -#: src/view/com/util/forms/PostDropdownBtn.tsx:189 +#: src/view/com/util/forms/PostDropdownBtn.tsx:218 msgid "Delete this post?" msgstr "ã“ã®æŠ•ç¨¿ã‚’å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ" -#: src/view/com/post-thread/PostThread.tsx:243 +#: src/view/com/post-thread/PostThread.tsx:242 msgid "Deleted post." msgstr "投稿を削除ã—ã¾ã—ãŸã€‚" @@ -669,6 +669,10 @@ msgstr "開発者サーãƒãƒ¼" msgid "Developer Tools" msgstr "開発者ツール" +#: src/view/com/composer/Composer.tsx:210 +msgid "Did you want to say anything?" +msgstr "" + #: src/view/com/composer/Composer.tsx:143 msgid "Discard" msgstr "ç ´æ£„" @@ -771,9 +775,9 @@ msgstr "メールアドレス:" #: src/view/screens/PreferencesHomeFeed.tsx:138 msgid "Enable this setting to only see replies between people you follow." -msgstr "ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザー間ã®è¿”ä¿¡ã ã‘ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" +msgstr "ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã¨ã€è‡ªåˆ†ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã‹ã‚‰ã®è¿”ä¿¡ã ã‘ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" -#: src/view/screens/Profile.tsx:425 +#: src/view/screens/Profile.tsx:426 msgid "End of feed" msgstr "フィードã®çµ‚ã‚り" @@ -801,7 +805,7 @@ msgstr "ä»¥ä¸‹ã«æ–°ã—ã„メールアドレスを入力ã—ã¦ãã ã•ã„。" msgid "Enter your username and password" msgstr "ユーザーåã¨ãƒ‘スワードを入力" -#: src/view/screens/Search/Search.tsx:106 +#: src/view/screens/Search/Search.tsx:105 msgid "Error:" msgstr "エラー:" @@ -818,7 +822,7 @@ msgstr "ALTテã‚ストを展開" msgid "Failed to load recommended feeds" msgstr "ãŠã™ã™ã‚ã®ãƒ•ィードã®ãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:554 msgid "Feed offline" msgstr "フィードã¯ã‚ªãƒ•ラインã§ã™" @@ -827,16 +831,16 @@ msgid "Feed Preferences" msgstr "フィードã®è¨å®š" #: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "フィードãƒãƒƒã‚¯" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx:164 +#: src/view/screens/Profile.tsx:165 #: src/view/shell/bottom-bar/BottomBar.tsx:181 -#: src/view/shell/desktop/LeftNav.tsx:339 -#: src/view/shell/Drawer.tsx:455 -#: src/view/shell/Drawer.tsx:456 +#: src/view/shell/desktop/LeftNav.tsx:340 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "フィード" @@ -848,11 +852,11 @@ msgstr "フィードã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æ•´ç†ã™ã‚‹ç‚ºã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ 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:422 +#: src/view/screens/Search/Search.tsx:414 msgid "Find users on Bluesky" msgstr "Blueskyã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’検索" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:412 msgid "Find users with the search tool on the right" msgstr "å³å´ã®æ¤œç´¢ãƒ„ールã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’検索" @@ -878,11 +882,11 @@ msgstr "何人ã‹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フォãƒãƒ¼ã—ã¦é–‹å§‹ã—ã¾ã™ã€‚興味を #: src/view/com/modals/Threadgate.tsx:98 msgid "Followed users" -msgstr "フォãƒãƒ¼ã—ã¦ã„るユーザー" +msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザー" #: src/view/screens/PreferencesHomeFeed.tsx:145 msgid "Followed users only" -msgstr "フォãƒãƒ¼ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿" +msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã®ã¿" #: src/view/screens/ProfileFollowers.tsx:25 msgid "Followers" @@ -933,7 +937,7 @@ 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:103 +#: src/view/shell/desktop/LeftNav.tsx:104 msgid "Go back" msgstr "戻る" @@ -955,7 +959,7 @@ msgid "Handle" msgstr "ãƒãƒ³ãƒ‰ãƒ«" #: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "ヘルプ" @@ -968,6 +972,14 @@ msgstr "アプリパスワードをãŠçŸ¥ã‚‰ã›ã—ã¾ã™ã€‚" 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:308 msgid "Hide user list" msgstr "ユーザーリストをéžè¡¨ç¤º" @@ -993,9 +1005,9 @@ msgid "Hmm, 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:303 -#: src/view/shell/Drawer.tsx:379 -#: src/view/shell/Drawer.tsx:380 +#: src/view/shell/desktop/LeftNav.tsx:304 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "ホーム" @@ -1003,7 +1015,7 @@ msgstr "ホーム" #: src/view/screens/PreferencesHomeFeed.tsx:95 #: src/view/screens/Settings.tsx:481 msgid "Home Feed Preferences" -msgstr "ホームフィードè¨å®š" +msgstr "ホームフィードã®è¨å®š" #: src/view/com/auth/login/ForgotPasswordForm.tsx:114 msgid "Hosting provider" @@ -1026,7 +1038,7 @@ msgstr "自分ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’æŒã£ã¦ã„ã¾ã™" msgid "If none are selected, suitable for all ages." msgstr "é¸æŠžã•れã¦ã„ãªã„å ´åˆã¯ã€ã™ã¹ã¦ã®å¹´é½¢ã«é©ã—ã¦ã„ã¾ã™ã€‚" -#: src/view/com/modals/AltImage.tsx:96 +#: src/view/com/modals/AltImage.tsx:97 msgid "Image alt text" msgstr "ç”»åƒã®ALTテã‚スト" @@ -1056,7 +1068,7 @@ msgstr "招待コード" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "招待コードãŒç¢ºèªã§ãã¾ã›ã‚“。æ£ã—ã入力ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã€ã‚‚ã†ä¸€åº¦å®Ÿè¡Œã—ã¦ãã ã•ã„。" -#: src/view/shell/Drawer.tsx:621 +#: src/view/shell/Drawer.tsx:640 msgid "Invite codes: {invitesAvailable} available" msgstr "使用å¯èƒ½ãªæ‹›å¾…コード: {invitesAvailable} 個" @@ -1136,9 +1148,9 @@ msgstr "ã“ã®ãƒ•ィードをã„ã„ã" #: src/view/screens/PostLikedBy.tsx:27 #: src/view/screens/ProfileFeedLikedBy.tsx:27 msgid "Liked by" -msgstr "ã„ã„ãã—ãŸäºº" +msgstr "ã„ã„ãã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "ã„ã„ã" @@ -1148,31 +1160,31 @@ msgstr "ã„ã„ã" #: src/view/com/modals/CreateOrEditList.tsx:186 msgid "List Avatar" -msgstr "リストアãƒã‚¿ãƒ¼" +msgstr "リストã®ã‚¢ãƒã‚¿ãƒ¼" #: src/view/com/modals/CreateOrEditList.tsx:199 msgid "List Name" msgstr "リストã®åå‰" -#: src/view/screens/Profile.tsx:165 -#: src/view/shell/desktop/LeftNav.tsx:376 -#: src/view/shell/Drawer.tsx:471 -#: src/view/shell/Drawer.tsx:472 +#: src/view/screens/Profile.tsx:166 +#: src/view/shell/desktop/LeftNav.tsx:377 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 msgid "Lists" msgstr "リスト" -#: src/view/com/post-thread/PostThread.tsx:260 -#: src/view/com/post-thread/PostThread.tsx:268 +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 msgid "Load more posts" -msgstr "より多ãã®æŠ•ç¨¿ã‚’ãƒãƒ¼ãƒ‰" +msgstr "投稿をã•らã«ãƒãƒ¼ãƒ‰" #: src/view/screens/Notifications.tsx:144 msgid "Load new notifications" -msgstr "æ–°ã—ã„通知をãƒãƒ¼ãƒ‰" +msgstr "最新ã®é€šçŸ¥ã‚’ãƒãƒ¼ãƒ‰" #: src/view/com/feeds/FeedPage.tsx:189 msgid "Load new posts" -msgstr "投稿をãƒãƒ¼ãƒ‰" +msgstr "æœ€æ–°ã®æŠ•ç¨¿ã‚’ãƒãƒ¼ãƒ‰" #: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 msgid "Loading..." @@ -1202,7 +1214,7 @@ msgstr "リストã«ãªã„アカウントã«ãƒã‚°ã‚¤ãƒ³" msgid "Make sure this is where you intend to go!" msgstr "æ„図ã—ãŸå ´æ‰€ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ï¼" -#: src/view/screens/Profile.tsx:162 +#: src/view/screens/Profile.tsx:163 msgid "Media" msgstr "メディア" @@ -1214,7 +1226,7 @@ msgstr "メンションã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" msgid "Mentioned users" msgstr "メンションã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" -#: src/view/screens/Search/Search.tsx:537 +#: src/view/screens/Search/Search.tsx:529 msgid "Menu" msgstr "メニュー" @@ -1224,9 +1236,9 @@ msgstr "サーãƒãƒ¼ã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" #: src/view/screens/Moderation.tsx:64 #: src/view/screens/Settings.tsx:563 -#: src/view/shell/desktop/LeftNav.tsx:394 -#: src/view/shell/Drawer.tsx:490 -#: src/view/shell/Drawer.tsx:491 +#: src/view/shell/desktop/LeftNav.tsx:395 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "モデレーション" @@ -1264,25 +1276,25 @@ msgstr "リストをミュート" msgid "Mute these accounts?" msgstr "ã“れらã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ミュートã—ã¾ã™ã‹ï¼Ÿ" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" msgstr "スレッドをミュート" #: src/view/screens/Moderation.tsx:109 msgid "Muted accounts" -msgstr "ミュートã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" +msgstr "ミュートä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" -#: src/view/screens/ModerationMutedAccounts.tsx:106 +#: src/view/screens/ModerationMutedAccounts.tsx:107 msgid "Muted Accounts" -msgstr "ミュートã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" +msgstr "ミュートä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" -#: src/view/screens/ModerationMutedAccounts.tsx:114 +#: 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 "ミュートをã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã€ãƒ•ィードã¨é€šçŸ¥ã‹ã‚‰ã®æŠ•稿ãŒå‰Šé™¤ã•れã¾ã™ã€‚ミュートã®è¨å®šã¯å®Œå…¨ã«éžå…¬é–‹ã§ã™ã€‚" +msgstr "ミュートä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æŠ•稿ã¯ã€ãƒ•ィードや通知ã‹ã‚‰å–り除ã‹ã‚Œã¾ã™ã€‚ミュートã®è¨å®šã¯å®Œå…¨ã«éžå…¬é–‹ã§ã™ã€‚" #: src/view/screens/ProfileList.tsx:272 msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." -msgstr "ミュートã¯éžå…¬é–‹ã§ã™ã€‚ミュートをã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã¨å¼•ãç¶šãé–¢ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æŠ•稿や通知をå—ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" +msgstr "ミュートã®è¨å®šã¯éžå…¬é–‹ã§ã™ã€‚ミュートä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã¨å¼•ãç¶šãé–¢ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æŠ•稿や通知をå—ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: src/view/com/modals/BirthDateSettings.tsx:56 msgid "My Birthday" @@ -1292,7 +1304,7 @@ msgstr "誕生日" msgid "My Feeds" msgstr "マイフィード" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "マイプãƒãƒ•ィール" @@ -1315,16 +1327,16 @@ msgid "New" msgstr "æ–°è¦" #: src/view/com/feeds/FeedPage.tsx:200 -#: src/view/screens/Feeds.tsx:510 -#: src/view/screens/Profile.tsx:353 +#: src/view/screens/Feeds.tsx:505 +#: src/view/screens/Profile.tsx:354 #: src/view/screens/ProfileFeed.tsx:430 #: src/view/screens/ProfileList.tsx:193 #: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/shell/desktop/LeftNav.tsx:247 msgid "New post" msgstr "æ–°ã—ã„æŠ•ç¨¿" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:257 msgid "New Post" msgstr "æ–°ã—ã„æŠ•ç¨¿" @@ -1362,9 +1374,9 @@ msgid "No results found for \"{query}\"" msgstr "「{query}ã€ã®æ¤œç´¢çµæžœã¯ã‚りã¾ã›ã‚“" #: src/view/com/modals/ListAddRemoveUsers.tsx:127 -#: src/view/screens/Search/Search.tsx:271 -#: src/view/screens/Search/Search.tsx:299 -#: src/view/screens/Search/Search.tsx:615 +#: src/view/screens/Search/Search.tsx:263 +#: src/view/screens/Search/Search.tsx:291 +#: src/view/screens/Search/Search.tsx:607 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "「{query}ã€ã®æ¤œç´¢çµæžœã¯ã‚りã¾ã›ã‚“" @@ -1388,9 +1400,9 @@ msgstr "注記:Blueskyã¯ã‚ªãƒ¼ãƒ—ンã§ãƒ‘ブリックãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã #: src/view/screens/Notifications.tsx:109 #: src/view/screens/Notifications.tsx:133 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:359 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "通知" @@ -1402,7 +1414,7 @@ msgstr "ã¡ã‚‡ã£ã¨ï¼" msgid "Okay" msgstr "OK" -#: src/view/com/composer/Composer.tsx:354 +#: src/view/com/composer/Composer.tsx:358 msgid "One or more images is missing alt text." msgstr "1ã¤ã‚‚ã—ãã¯è¤‡æ•°ã®ç”»åƒã«ALTテã‚ストãŒã‚りã¾ã›ã‚“。" @@ -1419,7 +1431,7 @@ msgid "Opens configurable language settings" msgstr "æ§‹æˆå¯èƒ½ãªè¨€èªžè¨å®šã‚’é–‹ã" #: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "招待コードã®ãƒªã‚¹ãƒˆã‚’é–‹ã" @@ -1530,13 +1542,17 @@ msgstr "" #~ msgid "Please tell us why you think this decision was incorrect." #~ msgstr "ã“ã®åˆ¤æ–ãŒèª¤ã£ã¦ã„ã‚‹ã¨è€ƒãˆã‚‹ç†ç”±ã‚’æ•™ãˆã¦ãã ã•ã„。" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/composer/Composer.tsx:214 +msgid "Please wait for your link card to finish loading" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/post-thread/PostThread.tsx:225 #: src/view/screens/PostThread.tsx:80 msgid "Post" msgstr "投稿" -#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:378 msgid "Post hidden" msgstr "投稿をéžè¡¨ç¤º" @@ -1548,11 +1564,11 @@ msgstr "投稿ã®è¨€èªž" msgid "Post Languages" msgstr "投稿ã®è¨€èªž" -#: src/view/com/post-thread/PostThread.tsx:437 +#: src/view/com/post-thread/PostThread.tsx:430 msgid "Post not found" msgstr "投稿ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: src/view/screens/Profile.tsx:160 +#: src/view/screens/Profile.tsx:161 msgid "Posts" msgstr "投稿" @@ -1577,6 +1593,8 @@ msgid "Privacy" msgstr "プライãƒã‚·ãƒ¼" #: src/view/screens/PrivacyPolicy.tsx:29 +#: src/view/screens/Settings.tsx:750 +#: src/view/shell/Drawer.tsx:262 msgid "Privacy Policy" msgstr "プライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼" @@ -1585,14 +1603,14 @@ msgid "Processing..." msgstr "処ç†ä¸..." #: src/view/shell/bottom-bar/BottomBar.tsx:247 -#: src/view/shell/desktop/LeftNav.tsx:412 -#: src/view/shell/Drawer.tsx:69 -#: src/view/shell/Drawer.tsx:525 -#: src/view/shell/Drawer.tsx:526 +#: src/view/shell/desktop/LeftNav.tsx:413 +#: 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:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "メールアドレスを確èªã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ä¿è·ã—ã¾ã™ã€‚" @@ -1672,7 +1690,7 @@ msgstr "ä¿å˜ã—ãŸãƒ•ィードã‹ã‚‰ã“ã®ãƒ•ィードを削除ã—ã¾ã™ã‹ï¼Ÿ msgid "Removed from list" msgstr "リストã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸ" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "返信" @@ -1701,7 +1719,7 @@ msgid "Report List" msgstr "ãƒªã‚¹ãƒˆã‚’å ±å‘Š" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:167 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "æŠ•ç¨¿ã‚’å ±å‘Š" @@ -1716,7 +1734,7 @@ msgstr "リãƒã‚¹ãƒˆã¾ãŸã¯å¼•用" #: src/view/screens/PostRepostedBy.tsx:27 msgid "Reposted by" -msgstr "リãƒã‚¹ãƒˆã—ãŸäºº" +msgstr "リãƒã‚¹ãƒˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" #: src/view/com/modals/ChangeEmail.tsx:181 #: src/view/com/modals/ChangeEmail.tsx:183 @@ -1760,7 +1778,7 @@ msgstr "è¨å®šã®çŠ¶æ…‹ã‚’ãƒªã‚»ãƒƒãƒˆ" msgid "Retry" msgstr "å†è©¦è¡Œ" -#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/AltImage.tsx:115 #: src/view/com/modals/BirthDateSettings.tsx:93 #: src/view/com/modals/BirthDateSettings.tsx:96 #: src/view/com/modals/ChangeHandle.tsx:173 @@ -1770,7 +1788,7 @@ msgstr "å†è©¦è¡Œ" msgid "Save" msgstr "ä¿å˜" -#: src/view/com/modals/AltImage.tsx:105 +#: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" msgstr "ALTテã‚ストをä¿å˜" @@ -1792,14 +1810,14 @@ msgstr "ä¿å˜ã•れãŸãƒ•ィード" #: src/view/com/modals/ListAddRemoveUsers.tsx:75 #: src/view/com/util/forms/SearchInput.tsx:64 -#: src/view/screens/Search/Search.tsx:401 -#: src/view/screens/Search/Search.tsx:567 +#: src/view/screens/Search/Search.tsx:393 +#: src/view/screens/Search/Search.tsx:559 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:322 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "検索" @@ -1856,8 +1874,8 @@ msgstr "メールをé€ä¿¡" msgid "Send Email" msgstr "メールをé€ä¿¡" -#: src/view/shell/Drawer.tsx:276 -#: src/view/shell/Drawer.tsx:297 +#: src/view/shell/Drawer.tsx:295 +#: src/view/shell/Drawer.tsx:316 msgid "Send feedback" msgstr "フィードãƒãƒƒã‚¯ã‚’é€ä¿¡" @@ -1871,15 +1889,15 @@ msgstr "æ–°ã—ã„パスワードをè¨å®š" #: src/view/screens/PreferencesHomeFeed.tsx:216 msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." -msgstr "フィードã‹ã‚‰å…¨ã¦ã®å¼•用をéžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚リãƒã‚¹ãƒˆã¯å¼•ãç¶šã表示ã•れã¾ã™ã€‚" +msgstr "フィード内ã®å¼•用をã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚リãƒã‚¹ãƒˆã¯å¼•ãç¶šã表示ã•れã¾ã™ã€‚" #: src/view/screens/PreferencesHomeFeed.tsx:113 msgid "Set this setting to \"No\" to hide all replies from your feed." -msgstr "フィードã‹ã‚‰å…¨ã¦ã®è¿”ä¿¡ã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" +msgstr "フィード内ã®è¿”ä¿¡ã‚’ã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" #: src/view/screens/PreferencesHomeFeed.tsx:182 msgid "Set this setting to \"No\" to hide all reposts from your feed." -msgstr "フィードã‹ã‚‰å…¨ã¦ã®ãƒªãƒã‚¹ãƒˆã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" +msgstr "フィード内ã®ãƒªãƒã‚¹ãƒˆã‚’ã™ã¹ã¦éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã„ã„ãˆã€ã«ã—ã¾ã™ã€‚" #: src/view/screens/PreferencesThreads.tsx:116 msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." @@ -1890,9 +1908,9 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f msgstr "ä¿å˜ã•れãŸãƒ•ィードã®ã‚µãƒ³ãƒ—ルを次ã®ãƒ•ィードã«è¡¨ç¤ºã™ã‚‹ã«ã¯ã€ã“ã®è¨å®šã‚’「ã¯ã„ã€ã«ã—ã¾ã™ã€‚ã“れã¯å®Ÿé¨“çš„ãªæ©Ÿèƒ½ã§ã™ã€‚" #: src/view/screens/Settings.tsx:277 -#: src/view/shell/desktop/LeftNav.tsx:430 -#: src/view/shell/Drawer.tsx:546 -#: src/view/shell/Drawer.tsx:547 +#: src/view/shell/desktop/LeftNav.tsx:431 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "è¨å®š" @@ -1901,7 +1919,7 @@ msgid "Sexual activity or erotic nudity." msgstr "性的行為ã¾ãŸã¯æ€§çš„ãªãƒŒãƒ¼ãƒ‰ã€‚" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:131 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 #: src/view/screens/ProfileList.tsx:384 msgid "Share" msgstr "共有" @@ -1933,7 +1951,7 @@ msgstr "返信を表示" #: src/view/screens/PreferencesThreads.tsx:94 msgid "Show replies by people you follow before all other replies." -msgstr "ä»–ã®ã™ã¹ã¦ã®è¿”ä¿¡ã®å‰ã«ã€ãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„る人ã‹ã‚‰ã®è¿”信を表示ã—ã¾ã™ã€‚" +msgstr "自分ãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„るユーザーã‹ã‚‰ã®è¿”ä¿¡ã‚’ã€ä»–ã®ã™ã¹ã¦ã®è¿”ä¿¡ã®å‰ã«è¡¨ç¤ºã—ã¾ã™ã€‚" #: src/view/screens/PreferencesHomeFeed.tsx:179 msgid "Show Reposts" @@ -2046,7 +2064,7 @@ msgstr "登録" msgid "Subscribe to this list" msgstr "ã“ã®ãƒªã‚¹ãƒˆã«ç™»éŒ²" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:349 msgid "Suggested Follows" msgstr "ãŠã™ã™ã‚ã®ãƒ•ã‚©ãƒãƒ¼" @@ -2071,7 +2089,9 @@ msgstr "トール" msgid "Terms" msgstr "æ¡ä»¶" +#: src/view/screens/Settings.tsx:744 #: src/view/screens/TermsOfService.tsx:29 +#: src/view/shell/Drawer.tsx:256 msgid "Terms of Service" msgstr "利用è¦ç´„" @@ -2092,7 +2112,7 @@ msgstr "コミュニティガイドラインã¯<0/>ã«ç§»å‹•ã•れã¾ã—ãŸ" msgid "The Copyright Policy has been moved to <0/>" msgstr "著作権ãƒãƒªã‚·ãƒ¼ãŒ<0/>ã«ç§»å‹•ã•れã¾ã—ãŸ" -#: src/view/com/post-thread/PostThread.tsx:440 +#: src/view/com/post-thread/PostThread.tsx:433 msgid "The post may have been deleted." msgstr "投稿ãŒå‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" @@ -2156,6 +2176,10 @@ msgstr "ã“ã®æŠ•ç¨¿ã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" 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" @@ -2175,7 +2199,7 @@ msgstr "変æ›" #: src/view/com/post-thread/PostThreadItem.tsx:704 #: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/util/forms/PostDropdownBtn.tsx:103 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "翻訳" @@ -2219,7 +2243,7 @@ msgstr "残念ãªãŒã‚‰ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã™ã‚‹ãŸã‚ã®è¦ä»¶ã‚’満㟠msgid "Unmute Account" msgstr "アカウントã®ãƒŸãƒ¥ãƒ¼ãƒˆã‚’解除" -#: src/view/com/util/forms/PostDropdownBtn.tsx:149 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "スレッドã®ãƒŸãƒ¥ãƒ¼ãƒˆã‚’解除" @@ -2284,15 +2308,15 @@ msgstr "<0/>ã«ãƒ•ã‚©ãƒãƒ¼ã•れã¦ã„るユーザー" msgid "Users in \"{0}\"" msgstr "{0}ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼" -#: src/view/screens/Settings.tsx:750 +#: src/view/screens/Settings.tsx:769 msgid "Verify email" msgstr "メールアドレスを確èª" -#: src/view/screens/Settings.tsx:775 +#: src/view/screens/Settings.tsx:794 msgid "Verify my email" msgstr "メールアドレスを確èª" -#: src/view/screens/Settings.tsx:784 +#: src/view/screens/Settings.tsx:803 msgid "Verify My Email" msgstr "メールアドレスを確èª" @@ -2317,7 +2341,7 @@ msgstr "サイトã¸ã‚¢ã‚¯ã‚»ã‚¹" msgid "We're so excited to have you join us!" msgstr "ç§ãŸã¡ã¯ã‚ãªãŸãŒå‚åŠ ã—ã¦ãれるã“ã¨ã‚’ã¨ã¦ã‚‚楽ã—ã¿ã«ã—ã¦ã„ã¾ã™ï¼" -#: src/view/screens/Search/Search.tsx:238 +#: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "大変申ã—訳ã‚りã¾ã›ã‚“ãŒã€æ¤œç´¢ã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚数分後ã«å†è©¦è¡Œã—ã¦ãã ã•ã„。" @@ -2348,13 +2372,13 @@ msgstr "アルゴリズムã«ã‚ˆã‚‹ãƒ•ィードã«ã¯ã©ã®è¨€èªžã‚’使用ã—ã¾ #: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 #: src/view/com/modals/Threadgate.tsx:66 msgid "Who can reply" -msgstr "返信ã§ãる人" +msgstr "返信ã§ãるユーザー" #: src/view/com/modals/crop-image/CropImage.web.tsx:102 msgid "Wide" msgstr "ワイド" -#: src/view/com/composer/Composer.tsx:409 +#: src/view/com/composer/Composer.tsx:413 msgid "Write post" msgstr "投稿を書ã" @@ -2393,20 +2417,20 @@ msgstr "ä¿å˜ã•れãŸãƒ•ィードãŒã‚りã¾ã›ã‚“ï¼" msgid "You don't have any saved feeds." msgstr "ä¿å˜ã•れãŸãƒ•ィードãŒã‚りã¾ã›ã‚“。" -#: src/view/com/post-thread/PostThread.tsx:388 +#: 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:141 +#: 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:145 +#: src/view/com/lists/ProfileLists.tsx:138 msgid "You have no lists." msgstr "リストãŒã‚りã¾ã›ã‚“。" -#: src/view/screens/ModerationBlockedAccounts.tsx:131 +#: 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 "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã¾ã ã‚りã¾ã›ã‚“。アカウントをブãƒãƒƒã‚¯ã™ã‚‹ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ãƒãƒ•ィールã«ç§»å‹•ã—ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€Œã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ブãƒãƒƒã‚¯ã€ã‚’é¸æŠžã—ã¾ã™ã€‚" @@ -2414,7 +2438,7 @@ msgstr "ブãƒãƒƒã‚¯ä¸ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã¾ã ã‚りã¾ã›ã‚“。アカウン msgid "You have not created any app passwords yet. You can create one by pressing the button below." msgstr "アプリパスワードã¯ã¾ã 作æˆã•れã¦ã„ã¾ã›ã‚“。下ã®ãƒœã‚¿ãƒ³ã‚’押ã™ã¨ä½œæˆã§ãã¾ã™ã€‚" -#: src/view/screens/ModerationMutedAccounts.tsx:130 +#: 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 "ミュートã—ã¦ã„るアカウントã¯ã¾ã ã‚りã¾ã›ã‚“。アカウントをミュートã™ã‚‹ã«ã¯ã€ãƒ—ãƒãƒ•ィールã«ç§»å‹•ã—ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€Œã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ミュートã€ã‚’é¸æŠžã—ã¾ã™ã€‚" @@ -2457,7 +2481,7 @@ msgstr "ホスティングプãƒãƒã‚¤ãƒ€ãƒ¼" #: src/view/screens/Settings.tsx:402 #: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "アプリパスワードを使用ã—ã¦ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ã€æ‹›å¾…コードã¯éžè¡¨ç¤ºã«ãªã‚Šã¾ã™ã€‚" diff --git a/src/logger/index.ts b/src/logger/index.ts index dd0380f6e..d6d8d9fc1 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -287,15 +287,11 @@ export class Logger { metadata: Metadata = {}, ) { if (!this.enabled) return - if (!enabledLogLevels[this.level].includes(level)) return const timestamp = Date.now() const meta = metadata || {} - for (const transport of this.transports) { - transport(level, message, meta, timestamp) - } - + // send every log to syslog add({ id: nanoid(), timestamp, @@ -303,6 +299,12 @@ export class Logger { message, metadata: meta, }) + + if (!enabledLogLevels[this.level].includes(level)) return + + for (const transport of this.transports) { + transport(level, message, meta, timestamp) + } } } diff --git a/src/logger/logDump.ts b/src/logger/logDump.ts index ec64bf4bd..563b12aa4 100644 --- a/src/logger/logDump.ts +++ b/src/logger/logDump.ts @@ -4,7 +4,7 @@ let entries: ConsoleTransportEntry[] = [] export function add(entry: ConsoleTransportEntry) { entries.unshift(entry) - entries = entries.slice(0, 50) + entries = entries.slice(0, 500) } export function getEntries() { diff --git a/src/platform/crypto.ts b/src/platform/crypto.ts new file mode 100644 index 000000000..c7deb21cc --- /dev/null +++ b/src/platform/crypto.ts @@ -0,0 +1,7 @@ +// HACK +// expo-modules-core tries to require('crypto') in uuid.web.js +// and while it tries to detect web crypto before doing so, our +// build fails when it tries to do this require. We use a babel +// and tsconfig alias to direct it here +// -prf +export default crypto diff --git a/src/platform/detection.ts b/src/platform/detection.ts index f4f7be240..150fc1fe3 100644 --- a/src/platform/detection.ts +++ b/src/platform/detection.ts @@ -14,5 +14,7 @@ export const isMobileWeb = global.window.matchMedia(isMobileWebMediaQuery)?.matches export const deviceLocales = dedupArray( - getLocales?.().map?.(locale => locale.languageCode), -) + getLocales?.() + .map?.(locale => locale.languageCode) + .filter(code => typeof code === 'string'), +) as string[] diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index f689c3d06..cdb542f5a 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -108,6 +108,7 @@ export function transform(legacy: Partial<LegacySchema>): Schema { onboarding: { step: legacy.onboarding?.step || defaults.onboarding.step, }, + hiddenPosts: defaults.hiddenPosts, } } diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index 5ed8e01f3..27b1f26bd 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -37,6 +37,7 @@ export const schema = z.object({ onboarding: z.object({ step: z.string(), }), + hiddenPosts: z.array(z.string()).optional(), // should move to server }) export type Schema = z.infer<typeof schema> @@ -66,4 +67,5 @@ export const defaults: Schema = { onboarding: { step: 'Home', }, + hiddenPosts: [], } diff --git a/src/state/preferences/hidden-posts.tsx b/src/state/preferences/hidden-posts.tsx new file mode 100644 index 000000000..11119ce75 --- /dev/null +++ b/src/state/preferences/hidden-posts.tsx @@ -0,0 +1,64 @@ +import React from 'react' +import * as persisted from '#/state/persisted' + +type SetStateCb = ( + s: persisted.Schema['hiddenPosts'], +) => persisted.Schema['hiddenPosts'] +type StateContext = persisted.Schema['hiddenPosts'] +type ApiContext = { + hidePost: ({uri}: {uri: string}) => void + unhidePost: ({uri}: {uri: string}) => void +} + +const stateContext = React.createContext<StateContext>( + persisted.defaults.hiddenPosts, +) +const apiContext = React.createContext<ApiContext>({ + hidePost: () => {}, + unhidePost: () => {}, +}) + +export function Provider({children}: React.PropsWithChildren<{}>) { + const [state, setState] = React.useState(persisted.get('hiddenPosts')) + + const setStateWrapped = React.useCallback( + (fn: SetStateCb) => { + const s = fn(persisted.get('hiddenPosts')) + setState(s) + persisted.write('hiddenPosts', s) + }, + [setState], + ) + + const api = React.useMemo( + () => ({ + hidePost: ({uri}: {uri: string}) => { + setStateWrapped(s => [...(s || []), uri]) + }, + unhidePost: ({uri}: {uri: string}) => { + setStateWrapped(s => (s || []).filter(u => u !== uri)) + }, + }), + [setStateWrapped], + ) + + React.useEffect(() => { + return persisted.onUpdate(() => { + setState(persisted.get('hiddenPosts')) + }) + }, [setStateWrapped]) + + return ( + <stateContext.Provider value={state}> + <apiContext.Provider value={api}>{children}</apiContext.Provider> + </stateContext.Provider> + ) +} + +export function useHiddenPosts() { + return React.useContext(stateContext) +} + +export function useHiddenPostsApi() { + return React.useContext(apiContext) +} diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index 1f4348cfc..5ec659031 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -1,17 +1,21 @@ 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' export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export { useRequireAltTextEnabled, useSetRequireAltTextEnabled, } from './alt-text-required' +export * from './hidden-posts' export function Provider({children}: React.PropsWithChildren<{}>) { return ( <LanguagesProvider> - <AltTextRequiredProvider>{children}</AltTextRequiredProvider> + <AltTextRequiredProvider> + <HiddenPostsProvider>{children}</HiddenPostsProvider> + </AltTextRequiredProvider> </LanguagesProvider> ) } diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts index fe207371d..785e29765 100644 --- a/src/state/queries/actor-autocomplete.ts +++ b/src/state/queries/actor-autocomplete.ts @@ -11,6 +11,7 @@ import { getModerationOpts, useModerationOpts, } from './preferences' +import {isInvalidHandle} from '#/lib/strings/handles' const DEFAULT_MOD_OPTS = getModerationOpts({ userDid: '', @@ -111,7 +112,7 @@ function computeSuggestions( } return items.filter(profile => { const mod = moderateProfile(profile, moderationOpts) - return !mod.account.filter + return !mod.account.filter && mod.account.cause?.type !== 'muted' }) } @@ -119,7 +120,7 @@ function prefixMatch( prefix: string, info: AppBskyActorDefs.ProfileViewBasic, ): boolean { - if (info.handle.includes(prefix)) { + if (!isInvalidHandle(info.handle) && info.handle.includes(prefix)) { return true } if (info.displayName?.toLocaleLowerCase().includes(prefix)) { diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts index c87e95f03..7a55b4e18 100644 --- a/src/state/queries/feed.ts +++ b/src/state/queries/feed.ts @@ -218,11 +218,13 @@ const FOLLOWING_FEED_STUB: FeedSourceInfo = { export function usePinnedFeedsInfos(): { feeds: FeedSourceInfo[] hasPinnedCustom: boolean + isLoading: boolean } { const queryClient = useQueryClient() const [tabs, setTabs] = React.useState<FeedSourceInfo[]>([ FOLLOWING_FEED_STUB, ]) + const [isLoading, setLoading] = React.useState(true) const {data: preferences} = usePreferencesQuery() const hasPinnedCustom = React.useMemo<boolean>(() => { @@ -284,10 +286,11 @@ export function usePinnedFeedsInfos(): { ) as FeedSourceInfo[] setTabs([FOLLOWING_FEED_STUB].concat(views)) + setLoading(false) } fetchFeedInfo() }, [queryClient, setTabs, preferences?.feeds?.pinned]) - return {feeds: tabs, hasPinnedCustom} + return {feeds: tabs, hasPinnedCustom, isLoading} } diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx index a189f20e4..abaabbf0e 100644 --- a/src/state/queries/notifications/unread.tsx +++ b/src/state/queries/notifications/unread.tsx @@ -89,6 +89,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { // update & broadcast setNumUnread('') broadcast.postMessage({event: ''}) + if (isNative) { + Notifications.setBadgeCountAsync(0) + } }, async checkUnread({invalidate}: {invalidate?: boolean} = {}) { diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts index cc5943163..411a0f791 100644 --- a/src/state/queries/notifications/util.ts +++ b/src/state/queries/notifications/util.ts @@ -2,12 +2,12 @@ import { AppBskyNotificationListNotifications, ModerationOpts, moderateProfile, - moderatePost, AppBskyFeedDefs, AppBskyFeedPost, AppBskyFeedRepost, AppBskyFeedLike, } from '@atproto/api' +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' import chunk from 'lodash.chunk' import {QueryClient} from '@tanstack/react-query' import {getAgent} from '../../session' @@ -156,7 +156,7 @@ async function fetchSubjects( ): Promise<Map<string, AppBskyFeedDefs.PostView>> { const uris = new Set<string>() for (const notif of groupedNotifs) { - if (notif.subjectUri) { + if (notif.subjectUri && !notif.subjectUri.includes('feed.generator')) { uris.add(notif.subjectUri) } } @@ -216,6 +216,8 @@ function getSubjectUri( ? notif.record.subject?.uri : undefined } + } else if (type === 'feedgen-like') { + return notif.reasonSubject } } diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index b91af372f..0e943622a 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -1,10 +1,5 @@ import React, {useCallback, useEffect, useRef} from 'react' -import { - AppBskyFeedDefs, - AppBskyFeedPost, - moderatePost, - PostModeration, -} from '@atproto/api' +import {AppBskyFeedDefs, AppBskyFeedPost, PostModeration} from '@atproto/api' import { useInfiniteQuery, InfiniteData, @@ -12,6 +7,7 @@ import { QueryClient, useQueryClient, } from '@tanstack/react-query' +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' import {useFeedTuners} from '../preferences/feed-tuners' import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip' import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types' diff --git a/src/state/queries/preferences/index.ts b/src/state/queries/preferences/index.ts index 872bb21af..a9aa7f26e 100644 --- a/src/state/queries/preferences/index.ts +++ b/src/state/queries/preferences/index.ts @@ -19,6 +19,7 @@ import { } from '#/state/queries/preferences/const' import {getModerationOpts} from '#/state/queries/preferences/moderation' import {STALE} from '#/state/queries' +import {useHiddenPosts} from '#/state/preferences/hidden-posts' export * from '#/state/queries/preferences/types' export * from '#/state/queries/preferences/moderation' @@ -94,15 +95,21 @@ export function usePreferencesQuery() { export function useModerationOpts() { const {currentAccount} = useSession() const prefs = usePreferencesQuery() + const hiddenPosts = useHiddenPosts() const opts = useMemo(() => { if (!prefs.data) { return } - return getModerationOpts({ + const moderationOpts = getModerationOpts({ userDid: currentAccount?.did || '', preferences: prefs.data, }) - }, [currentAccount?.did, prefs.data]) + + return { + ...moderationOpts, + hiddenPosts, + } + }, [currentAccount?.did, prefs.data, hiddenPosts]) return opts } diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts index 4df82f8fc..a77d2a44f 100644 --- a/src/view/com/auth/create/state.ts +++ b/src/view/com/auth/create/state.ts @@ -144,7 +144,7 @@ export async function submit({ } export function is13(state: CreateAccountState) { - return getAge(state.birthDate) >= 18 + return getAge(state.birthDate) >= 13 } export function is18(state: CreateAccountState) { diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index c4453e0c3..9f60923d6 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -207,7 +207,11 @@ export const ComposePost = observer(function ComposePost({ setError('') if (richtext.text.trim().length === 0 && gallery.isEmpty && !extLink) { - setError('Did you want to say anything?') + setError(_(msg`Did you want to say anything?`)) + return + } + if (extLink?.isLoading) { + setError(_(msg`Please wait for your link card to finish loading`)) return } @@ -438,7 +442,7 @@ export const ComposePost = observer(function ComposePost({ accessibilityLabel={_(msg`Add link card`)} accessibilityHint={`Creates a card with a thumbnail. The card links to ${url}`}> <Text style={pal.text}> - <Trans>Add link card:</Trans> + <Trans>Add link card:</Trans>{' '} <Text style={[pal.link, s.ml5]}>{toShortUrl(url)}</Text> </Text> </TouchableOpacity> @@ -452,7 +456,7 @@ export const ComposePost = observer(function ComposePost({ <OpenCameraBtn gallery={gallery} /> </> ) : null} - {isDesktop ? <EmojiPickerButton /> : null} + {!isMobile ? <EmojiPickerButton /> : null} <View style={s.flex1} /> <SelectLangBtn /> <CharProgress count={graphemeLength} /> diff --git a/src/view/com/composer/text-input/web/Autocomplete.tsx b/src/view/com/composer/text-input/web/Autocomplete.tsx index 1f7412561..51197b8e4 100644 --- a/src/view/com/composer/text-input/web/Autocomplete.tsx +++ b/src/view/com/composer/text-input/web/Autocomplete.tsx @@ -134,7 +134,7 @@ const MentionList = forwardRef<MentionListRef, SuggestionProps>( return true } - if (event.key === 'Enter') { + if (event.key === 'Enter' || event.key === 'Tab') { enterHandler() return true } 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 09a2dcf41..f4b2d99b0 100644 --- a/src/view/com/composer/text-input/web/EmojiPicker.web.tsx +++ b/src/view/com/composer/text-input/web/EmojiPicker.web.tsx @@ -76,7 +76,7 @@ export function EmojiPicker({close}: {close: () => void}) { return (await import('./EmojiPickerData.json')).default }} onEmojiSelect={onInsert} - autoFocus={false} + autoFocus={true} /> </View> </TouchableWithoutFeedback> @@ -96,6 +96,7 @@ const styles = StyleSheet.create({ }, trigger: { backgroundColor: 'transparent', + // @ts-ignore web only -prf border: 'none', paddingTop: 4, paddingLeft: 12, diff --git a/src/view/com/feeds/ProfileFeedgens.tsx b/src/view/com/feeds/ProfileFeedgens.tsx index ff6505501..8665fbfac 100644 --- a/src/view/com/feeds/ProfileFeedgens.tsx +++ b/src/view/com/feeds/ProfileFeedgens.tsx @@ -1,12 +1,5 @@ import React from 'react' -import { - Dimensions, - RefreshControl, - StyleProp, - StyleSheet, - View, - ViewStyle, -} from 'react-native' +import {Dimensions, StyleProp, StyleSheet, View, ViewStyle} from 'react-native' import {useQueryClient} from '@tanstack/react-query' import {List, ListRef} from '../util/List' import {FeedSourceCardLoaded} from './FeedSourceCard' @@ -180,22 +173,14 @@ export const ProfileFeedgens = React.forwardRef< data={items} keyExtractor={(item: any) => item._reactKey || item.uri} renderItem={renderItemInner} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - progressViewOffset={headerOffset} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} + headerOffset={headerOffset} contentContainerStyle={{ minHeight: Dimensions.get('window').height * 1.5, }} - style={{paddingTop: headerOffset}} indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'} removeClippedSubviews={true} - contentOffset={{x: 0, y: headerOffset * -1}} // @ts-ignore our .web version only -prf desktopFixedHeight onEndReached={onEndReached} diff --git a/src/view/com/lists/ListMembers.tsx b/src/view/com/lists/ListMembers.tsx index a31ca4793..932f4b512 100644 --- a/src/view/com/lists/ListMembers.tsx +++ b/src/view/com/lists/ListMembers.tsx @@ -2,7 +2,6 @@ import React from 'react' import { ActivityIndicator, Dimensions, - RefreshControl, StyleProp, View, ViewStyle, @@ -15,7 +14,6 @@ import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn' import {ProfileCard} from '../profile/ProfileCard' import {Button} from '../util/forms/Button' import {useAnalytics} from 'lib/analytics/analytics' -import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {useListMembersQuery} from '#/state/queries/list-members' import {logger} from '#/logger' @@ -51,7 +49,6 @@ export function ListMembers({ headerOffset?: number desktopFixedHeightOffset?: number }) { - const pal = usePalette('default') const {track} = useAnalytics() const [isRefreshing, setIsRefreshing] = React.useState(false) const {isMobile} = useWebMediaQueries() @@ -183,6 +180,7 @@ export function ListMembers({ profile={(item as AppBskyGraphDefs.ListItemView).subject} renderButton={renderMemberButton} style={{paddingHorizontal: isMobile ? 8 : 14, paddingVertical: 4}} + noModFilter /> ) }, @@ -215,24 +213,16 @@ export function ListMembers({ renderItem={renderItem} ListHeaderComponent={renderHeader} ListFooterComponent={Footer} - refreshControl={ - <RefreshControl - refreshing={isRefreshing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - progressViewOffset={headerOffset} - /> - } + refreshing={isRefreshing} + onRefresh={onRefresh} + headerOffset={headerOffset} contentContainerStyle={{ minHeight: Dimensions.get('window').height * 1.5, }} - style={{paddingTop: headerOffset}} onScrolledDownChange={onScrolledDownChange} onEndReached={onEndReached} onEndReachedThreshold={0.6} removeClippedSubviews={true} - contentOffset={{x: 0, y: headerOffset * -1}} // @ts-ignore our .web version only -prf desktopFixedHeight={desktopFixedHeightOffset || true} /> diff --git a/src/view/com/lists/MyLists.tsx b/src/view/com/lists/MyLists.tsx index 586ad234e..a2a6b0651 100644 --- a/src/view/com/lists/MyLists.tsx +++ b/src/view/com/lists/MyLists.tsx @@ -119,31 +119,51 @@ export function MyLists({ [error, onRefresh, renderItem, pal], ) - const FlatListCom = inline ? RNFlatList : List - return ( - <View testID={testID} style={style}> - {items.length > 0 && ( - <FlatListCom - testID={testID ? `${testID}-flatlist` : undefined} - data={items} - keyExtractor={item => (item.uri ? item.uri : item._reactKey)} - renderItem={renderItemInner} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } - contentContainerStyle={[s.contentContainer]} - removeClippedSubviews={true} - // @ts-ignore our .web version only -prf - desktopFixedHeight - /> - )} - </View> - ) + if (inline) { + return ( + <View testID={testID} style={style}> + {items.length > 0 && ( + <RNFlatList + testID={testID ? `${testID}-flatlist` : undefined} + data={items} + keyExtractor={item => (item.uri ? item.uri : item._reactKey)} + renderItem={renderItemInner} + refreshControl={ + <RefreshControl + refreshing={isPTRing} + onRefresh={onRefresh} + tintColor={pal.colors.text} + titleColor={pal.colors.text} + /> + } + contentContainerStyle={[s.contentContainer]} + removeClippedSubviews={true} + // @ts-ignore our .web version only -prf + desktopFixedHeight + /> + )} + </View> + ) + } else { + return ( + <View testID={testID} style={style}> + {items.length > 0 && ( + <List + testID={testID ? `${testID}-flatlist` : undefined} + data={items} + keyExtractor={item => (item.uri ? item.uri : item._reactKey)} + renderItem={renderItemInner} + refreshing={isPTRing} + onRefresh={onRefresh} + contentContainerStyle={[s.contentContainer]} + removeClippedSubviews={true} + // @ts-ignore our .web version only -prf + desktopFixedHeight + /> + )} + </View> + ) + } } const styles = StyleSheet.create({ diff --git a/src/view/com/lists/ProfileLists.tsx b/src/view/com/lists/ProfileLists.tsx index e3d9bd0b4..db981717f 100644 --- a/src/view/com/lists/ProfileLists.tsx +++ b/src/view/com/lists/ProfileLists.tsx @@ -1,12 +1,5 @@ import React from 'react' -import { - Dimensions, - RefreshControl, - StyleProp, - StyleSheet, - View, - ViewStyle, -} from 'react-native' +import {Dimensions, StyleProp, StyleSheet, View, ViewStyle} from 'react-native' import {useQueryClient} from '@tanstack/react-query' import {List, ListRef} from '../util/List' import {ListCard} from './ListCard' @@ -182,22 +175,14 @@ export const ProfileLists = React.forwardRef<SectionRef, ProfileListsProps>( data={items} keyExtractor={(item: any) => item._reactKey} renderItem={renderItemInner} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - progressViewOffset={headerOffset} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} + headerOffset={headerOffset} contentContainerStyle={{ minHeight: Dimensions.get('window').height * 1.5, }} - style={{paddingTop: headerOffset}} indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'} removeClippedSubviews={true} - contentOffset={{x: 0, y: headerOffset * -1}} // @ts-ignore our .web version only -prf desktopFixedHeight onEndReached={onEndReached} diff --git a/src/view/com/modals/AltImage.tsx b/src/view/com/modals/AltImage.tsx index 80130f43a..a2e918317 100644 --- a/src/view/com/modals/AltImage.tsx +++ b/src/view/com/modals/AltImage.tsx @@ -80,6 +80,7 @@ export function Component({image}: Props) { source={{ uri: image.cropped?.path ?? image.path, }} + contentFit="contain" accessible={true} accessibilityIgnoresInvertColors /> diff --git a/src/view/com/modals/Threadgate.tsx b/src/view/com/modals/Threadgate.tsx index 9d78a2e6d..0deef185b 100644 --- a/src/view/com/modals/Threadgate.tsx +++ b/src/view/com/modals/Threadgate.tsx @@ -69,7 +69,7 @@ export function Component({ <ScrollView> <Text style={[pal.text, styles.description]}> - Choose "Everybody" or "Nobody" + <Trans>Choose "Everybody" or "Nobody"</Trans> </Text> <View style={{flexDirection: 'row', gap: 6, paddingHorizontal: 6}}> <Selectable @@ -86,7 +86,7 @@ export function Component({ /> </View> <Text style={[pal.text, styles.description]}> - Or combine these options: + <Trans>Or combine these options:</Trans> </Text> <View style={{flexDirection: 'column', gap: 4, paddingHorizontal: 6}}> <Selectable diff --git a/src/view/com/notifications/Feed.tsx b/src/view/com/notifications/Feed.tsx index 52d534c4f..a99fe2c1d 100644 --- a/src/view/com/notifications/Feed.tsx +++ b/src/view/com/notifications/Feed.tsx @@ -1,13 +1,12 @@ import React from 'react' import {CenteredView} from '../util/Views' -import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {FeedItem} from './FeedItem' import {NotificationFeedLoadingPlaceholder} from '../util/LoadingPlaceholder' import {ErrorMessage} from '../util/error/ErrorMessage' import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn' import {EmptyState} from '../util/EmptyState' import {s} from 'lib/styles' -import {usePalette} from 'lib/hooks/usePalette' import {useNotificationFeedQuery} from '#/state/queries/notifications/feed' import {useUnreadNotificationsApi} from '#/state/queries/notifications/unread' import {logger} from '#/logger' @@ -30,7 +29,6 @@ export function Feed({ onScrolledDownChange: (isScrolledDown: boolean) => void ListHeaderComponent?: () => JSX.Element }) { - const pal = usePalette('default') const [isPTRing, setIsPTRing] = React.useState(false) const moderationOpts = useModerationOpts() @@ -152,14 +150,8 @@ export function Feed({ renderItem={renderItem} ListHeaderComponent={ListHeaderComponent} ListFooterComponent={FeedFooter} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} onEndReachedThreshold={0.6} onScrolledDownChange={onScrolledDownChange} diff --git a/src/view/com/notifications/FeedItem.tsx b/src/view/com/notifications/FeedItem.tsx index aaa2ea2c6..24b7e4fb6 100644 --- a/src/view/com/notifications/FeedItem.tsx +++ b/src/view/com/notifications/FeedItem.tsx @@ -42,6 +42,7 @@ import {TimeElapsed} from '../util/TimeElapsed' import {isWeb} from 'platform/detection' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {FeedSourceCard} from '../feeds/FeedSourceCard' const MAX_AUTHORS = 5 @@ -112,7 +113,7 @@ let FeedItem = ({ ] }, [item, moderationOpts]) - if (item.subjectUri && !item.subject) { + if (item.subjectUri && !item.subject && item.type !== 'feedgen-like') { // don't render anything if the target post was deleted or unfindable return <View /> } @@ -166,7 +167,7 @@ let FeedItem = ({ iconStyle = [s.blue3 as FontAwesomeIconStyle] } else if (item.type === 'feedgen-like') { action = `liked your custom feed${ - item.subjectUri ? ` '${new AtUri(item.subjectUri).rkey}}'` : '' + item.subjectUri ? ` '${new AtUri(item.subjectUri).rkey}'` : '' }` icon = 'HeartIconSolid' iconStyle = [ @@ -256,6 +257,13 @@ let FeedItem = ({ {item.type === 'post-like' || item.type === 'repost' ? ( <AdditionalPostText post={item.subject} /> ) : null} + {item.type === 'feedgen-like' && item.subjectUri ? ( + <FeedSourceCard + feedUri={item.subjectUri} + style={[pal.view, pal.border, styles.feedcard]} + showLikes + /> + ) : null} </View> </Link> ) @@ -496,6 +504,12 @@ const styles = StyleSheet.create({ marginLeft: 2, opacity: 0.8, }, + feedcard: { + borderWidth: 1, + borderRadius: 8, + paddingVertical: 12, + marginTop: 6, + }, addedContainer: { paddingTop: 4, diff --git a/src/view/com/post-thread/PostLikedBy.tsx b/src/view/com/post-thread/PostLikedBy.tsx index 245ba59e8..6e013f611 100644 --- a/src/view/com/post-thread/PostLikedBy.tsx +++ b/src/view/com/post-thread/PostLikedBy.tsx @@ -1,18 +1,16 @@ import React, {useCallback, useMemo, useState} from 'react' -import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api' import {CenteredView} from '../util/Views' import {List} from '../util/List' import {ErrorMessage} from '../util/error/ErrorMessage' import {ProfileCardWithFollowBtn} from '../profile/ProfileCard' -import {usePalette} from 'lib/hooks/usePalette' import {logger} from '#/logger' import {useResolveUriQuery} from '#/state/queries/resolve-uri' import {usePostLikedByQuery} from '#/state/queries/post-liked-by' import {cleanError} from '#/lib/strings/errors' export function PostLikedBy({uri}: {uri: string}) { - const pal = usePalette('default') const [isPTRing, setIsPTRing] = useState(false) const { data: resolvedUri, @@ -88,14 +86,8 @@ export function PostLikedBy({uri}: {uri: string}) { <List data={likes} keyExtractor={item => item.actor.did} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} diff --git a/src/view/com/post-thread/PostRepostedBy.tsx b/src/view/com/post-thread/PostRepostedBy.tsx index 5cc006388..a2d3be558 100644 --- a/src/view/com/post-thread/PostRepostedBy.tsx +++ b/src/view/com/post-thread/PostRepostedBy.tsx @@ -1,18 +1,16 @@ import React, {useMemo, useCallback, useState} from 'react' -import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {AppBskyActorDefs as ActorDefs} from '@atproto/api' import {CenteredView} from '../util/Views' import {List} from '../util/List' import {ProfileCardWithFollowBtn} from '../profile/ProfileCard' import {ErrorMessage} from '../util/error/ErrorMessage' -import {usePalette} from 'lib/hooks/usePalette' import {logger} from '#/logger' import {useResolveUriQuery} from '#/state/queries/resolve-uri' import {usePostRepostedByQuery} from '#/state/queries/post-reposted-by' import {cleanError} from '#/lib/strings/errors' export function PostRepostedBy({uri}: {uri: string}) { - const pal = usePalette('default') const [isPTRing, setIsPTRing] = useState(false) const { data: resolvedUri, @@ -89,14 +87,8 @@ export function PostRepostedBy({uri}: {uri: string}) { <List data={repostedBy} keyExtractor={item => item.did} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index 917550884..6cd1f3551 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -2,7 +2,6 @@ import React, {useEffect, useRef} from 'react' import { ActivityIndicator, Pressable, - RefreshControl, StyleSheet, TouchableOpacity, View, @@ -349,14 +348,8 @@ function PostThreadLoaded({ } keyExtractor={item => item._reactKey} renderItem={renderItem} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onPTR} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onPTR} onContentSizeChange={onContentSizeChange} style={s.hContentRegion} // @ts-ignore our .web version only -prf diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 2ff803071..986fd70b2 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -5,9 +5,9 @@ import { AppBskyFeedDefs, AppBskyFeedPost, RichText as RichTextAPI, - moderatePost, PostModeration, } from '@atproto/api' +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {Link, TextLink} from '../util/Link' import {RichText} from '../util/text/RichText' @@ -186,9 +186,9 @@ let PostThreadItemLoaded = ({ return makeProfileLink(post.author, 'post', urip.rkey, 'reposted-by') }, [post.uri, post.author]) const repostsTitle = 'Reposts of this post' - const isSelfLabeledPost = + const isModeratedPost = moderation.decisions.post.cause?.type === 'label' && - moderation.decisions.post.cause.label.src === currentAccount?.did + moderation.decisions.post.cause.label.src !== currentAccount?.did const translatorUrl = getTranslatorLink( record?.text || '', @@ -335,7 +335,7 @@ let PostThreadItemLoaded = ({ postUri={post.uri} record={record} showAppealLabelItem={ - post.author.did === currentAccount?.did && !isSelfLabeledPost + post.author.did === currentAccount?.did && isModeratedPost } style={{ paddingVertical: 6, @@ -539,6 +539,7 @@ let PostThreadItemLoaded = ({ timestamp={post.indexedAt} postHref={postHref} showAvatar={isThreadedChild} + avatarModeration={moderation.avatar} avatarSize={28} displayNameType="md-bold" displayNameStyle={isThreadedChild && s.ml2} diff --git a/src/view/com/post/Post.tsx b/src/view/com/post/Post.tsx index 9b1bf7a49..fca4171c3 100644 --- a/src/view/com/post/Post.tsx +++ b/src/view/com/post/Post.tsx @@ -4,10 +4,10 @@ import { AppBskyFeedDefs, AppBskyFeedPost, AtUri, - moderatePost, PostModeration, RichText as RichTextAPI, } from '@atproto/api' +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {Link, TextLink} from '../util/Link' import {UserInfoText} from '../util/UserInfoText' @@ -221,6 +221,7 @@ const styles = StyleSheet.create({ paddingBottom: 5, paddingLeft: 10, borderTopWidth: 1, + // @ts-ignore web only -prf cursor: 'pointer', }, layout: { diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx index 8d5c11bda..02a3537eb 100644 --- a/src/view/com/posts/Feed.tsx +++ b/src/view/com/posts/Feed.tsx @@ -3,7 +3,6 @@ import { ActivityIndicator, AppState, Dimensions, - RefreshControl, StyleProp, StyleSheet, View, @@ -16,7 +15,6 @@ import {FeedErrorMessage} from './FeedErrorMessage' import {FeedSlice} from './FeedSlice' import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn' import {useAnalytics} from 'lib/analytics/analytics' -import {usePalette} from 'lib/hooks/usePalette' import {useTheme} from 'lib/ThemeContext' import {logger} from '#/logger' import { @@ -74,7 +72,6 @@ let Feed = ({ ListHeaderComponent?: () => JSX.Element extraData?: any }): React.ReactNode => { - const pal = usePalette('default') const theme = useTheme() const {track} = useAnalytics() const queryClient = useQueryClient() @@ -98,10 +95,13 @@ let Feed = ({ isFetchingNextPage, fetchNextPage, } = usePostFeedQuery(feed, feedParams, opts) - const isEmpty = !isFetching && !data?.pages[0]?.slices.length if (data?.pages[0]) { lastFetchRef.current = data?.pages[0].fetchedAt } + const isEmpty = React.useMemo( + () => !isFetching && !data?.pages?.some(page => page.slices.length), + [isFetching, data], + ) const checkForNew = React.useCallback(async () => { if (!data?.pages[0] || isFetching || !onHasNew || !enabled) { @@ -294,25 +294,17 @@ let Feed = ({ renderItem={renderItem} ListFooterComponent={FeedFooter} ListHeaderComponent={ListHeaderComponent} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - progressViewOffset={headerOffset} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} + headerOffset={headerOffset} contentContainerStyle={{ minHeight: Dimensions.get('window').height * 1.5, }} - style={{paddingTop: headerOffset}} onScrolledDownChange={onScrolledDownChange} indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'} onEndReached={onEndReached} onEndReachedThreshold={2} // number of posts left to trigger load more removeClippedSubviews={true} - contentOffset={{x: 0, y: headerOffset * -1}} extraData={extraData} // @ts-ignore our .web version only -prf desktopFixedHeight={ diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx index 20d199745..942d7bf71 100644 --- a/src/view/com/posts/FeedItem.tsx +++ b/src/view/com/posts/FeedItem.tsx @@ -34,6 +34,7 @@ import {countLines} from 'lib/strings/helpers' import {useComposerControls} from '#/state/shell/composer' import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' import {FeedNameText} from '../util/FeedInfoText' +import {useSession} from '#/state/session' export function FeedItem({ post, @@ -102,10 +103,14 @@ let FeedItemInner = ({ }): React.ReactNode => { const {openComposer} = useComposerControls() const pal = usePalette('default') + const {currentAccount} = useSession() const href = useMemo(() => { const urip = new AtUri(post.uri) return makeProfileLink(post.author, 'post', urip.rkey) }, [post.uri, post.author]) + const isModeratedPost = + moderation.decisions.post.cause?.type === 'label' && + moderation.decisions.post.cause.label.src !== currentAccount?.did const replyAuthorDid = useMemo(() => { if (!record?.reply) { @@ -284,7 +289,14 @@ let FeedItemInner = ({ postEmbed={post.embed} postAuthor={post.author} /> - <PostCtrls post={post} record={record} onPressReply={onPressReply} /> + <PostCtrls + post={post} + record={record} + onPressReply={onPressReply} + showAppealLabelItem={ + post.author.did === currentAccount?.did && isModeratedPost + } + /> </View> </View> </Link> @@ -364,6 +376,7 @@ const styles = StyleSheet.create({ borderTopWidth: 1, paddingLeft: 10, paddingRight: 15, + // @ts-ignore web only -prf cursor: 'pointer', overflow: 'hidden', }, diff --git a/src/view/com/profile/ProfileCard.tsx b/src/view/com/profile/ProfileCard.tsx index c5b2dc528..ef95f5924 100644 --- a/src/view/com/profile/ProfileCard.tsx +++ b/src/view/com/profile/ProfileCard.tsx @@ -27,6 +27,7 @@ import {useSession} from '#/state/session' export function ProfileCard({ testID, profile: profileUnshadowed, + noModFilter, noBg, noBorder, followers, @@ -35,6 +36,7 @@ export function ProfileCard({ }: { testID?: string profile: AppBskyActorDefs.ProfileViewBasic + noModFilter?: boolean noBg?: boolean noBorder?: boolean followers?: AppBskyActorDefs.ProfileView[] | undefined @@ -50,7 +52,11 @@ export function ProfileCard({ return null } const moderation = moderateProfile(profile, moderationOpts) - if (moderation.account.filter) { + if ( + !noModFilter && + moderation.account.filter && + moderation.account.cause?.type !== 'muted' + ) { return null } diff --git a/src/view/com/profile/ProfileFollowers.tsx b/src/view/com/profile/ProfileFollowers.tsx index 077dabe53..fd8dee173 100644 --- a/src/view/com/profile/ProfileFollowers.tsx +++ b/src/view/com/profile/ProfileFollowers.tsx @@ -1,18 +1,16 @@ import React from 'react' -import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {AppBskyActorDefs as ActorDefs} from '@atproto/api' import {CenteredView} from '../util/Views' import {List} from '../util/List' import {ErrorMessage} from '../util/error/ErrorMessage' import {ProfileCardWithFollowBtn} from './ProfileCard' -import {usePalette} from 'lib/hooks/usePalette' import {useProfileFollowersQuery} from '#/state/queries/profile-followers' import {useResolveDidQuery} from '#/state/queries/resolve-uri' import {logger} from '#/logger' import {cleanError} from '#/lib/strings/errors' export function ProfileFollowers({name}: {name: string}) { - const pal = usePalette('default') const [isPTRing, setIsPTRing] = React.useState(false) const { data: resolvedDid, @@ -90,14 +88,8 @@ export function ProfileFollowers({name}: {name: string}) { <List data={followers} keyExtractor={item => item.did} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} diff --git a/src/view/com/profile/ProfileFollows.tsx b/src/view/com/profile/ProfileFollows.tsx index 5265ee07e..091922dd9 100644 --- a/src/view/com/profile/ProfileFollows.tsx +++ b/src/view/com/profile/ProfileFollows.tsx @@ -1,18 +1,16 @@ import React from 'react' -import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {AppBskyActorDefs as ActorDefs} from '@atproto/api' import {CenteredView} from '../util/Views' import {List} from '../util/List' import {ErrorMessage} from '../util/error/ErrorMessage' import {ProfileCardWithFollowBtn} from './ProfileCard' -import {usePalette} from 'lib/hooks/usePalette' import {useProfileFollowsQuery} from '#/state/queries/profile-follows' import {useResolveDidQuery} from '#/state/queries/resolve-uri' import {logger} from '#/logger' import {cleanError} from '#/lib/strings/errors' export function ProfileFollows({name}: {name: string}) { - const pal = usePalette('default') const [isPTRing, setIsPTRing] = React.useState(false) const { data: resolvedDid, @@ -90,14 +88,8 @@ export function ProfileFollows({name}: {name: string}) { <List data={follows} keyExtractor={item => item.did} - refreshControl={ - <RefreshControl - refreshing={isPTRing} - onRefresh={onRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} diff --git a/src/view/com/util/Html.tsx b/src/view/com/util/Html.tsx index 1590955a2..2e4719481 100644 --- a/src/view/com/util/Html.tsx +++ b/src/view/com/util/Html.tsx @@ -30,6 +30,7 @@ export function H1({children}: React.PropsWithChildren<{}>) { const styles = useStyles() const pal = usePalette('default') const typography = useTheme().typography['title-xl'] + // @ts-ignore Expo's TextStyle definition seems to have gotten away from RN's -prf return <ExpoH1 style={[typography, pal.text, styles.h1]}>{children}</ExpoH1> } @@ -37,6 +38,7 @@ export function H2({children}: React.PropsWithChildren<{}>) { const styles = useStyles() const pal = usePalette('default') const typography = useTheme().typography['title-lg'] + // @ts-ignore Expo's TextStyle definition seems to have gotten away from RN's -prf return <ExpoH2 style={[typography, pal.text, styles.h2]}>{children}</ExpoH2> } @@ -44,6 +46,7 @@ export function H3({children}: React.PropsWithChildren<{}>) { const styles = useStyles() const pal = usePalette('default') const typography = useTheme().typography.title + // @ts-ignore Expo's TextStyle definition seems to have gotten away from RN's -prf return <ExpoH3 style={[typography, pal.text, styles.h3]}>{children}</ExpoH3> } @@ -51,6 +54,7 @@ export function H4({children}: React.PropsWithChildren<{}>) { const styles = useStyles() const pal = usePalette('default') const typography = useTheme().typography['title-sm'] + // @ts-ignore Expo's TextStyle definition seems to have gotten away from RN's -prf return <ExpoH4 style={[typography, pal.text, styles.h4]}>{children}</ExpoH4> } diff --git a/src/view/com/util/List.tsx b/src/view/com/util/List.tsx index 2acc3f4b3..9abd7d35a 100644 --- a/src/view/com/util/List.tsx +++ b/src/view/com/util/List.tsx @@ -1,27 +1,42 @@ import React, {memo, startTransition} from 'react' -import {FlatListProps} from 'react-native' +import {FlatListProps, RefreshControl} from 'react-native' import {FlatList_INTERNAL} from './Views' +import {addStyle} from 'lib/styles' import {useScrollHandlers} from '#/lib/ScrollContext' import {runOnJS, useSharedValue} from 'react-native-reanimated' import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED' +import {usePalette} from '#/lib/hooks/usePalette' export type ListMethods = FlatList_INTERNAL export type ListProps<ItemT> = Omit< FlatListProps<ItemT>, - 'onScroll' // Use ScrollContext instead. + | 'onScroll' // Use ScrollContext instead. + | 'refreshControl' // Pass refreshing and/or onRefresh instead. + | 'contentOffset' // Pass headerOffset instead. > & { onScrolledDownChange?: (isScrolledDown: boolean) => void + headerOffset?: number + refreshing?: boolean + onRefresh?: () => void } export type ListRef = React.MutableRefObject<FlatList_INTERNAL | null> const SCROLLED_DOWN_LIMIT = 200 function ListImpl<ItemT>( - {onScrolledDownChange, ...props}: ListProps<ItemT>, + { + onScrolledDownChange, + refreshing, + onRefresh, + headerOffset, + style, + ...props + }: ListProps<ItemT>, ref: React.Ref<ListMethods>, ) { const isScrolledDown = useSharedValue(false) const contextScrollHandlers = useScrollHandlers() + const pal = usePalette('default') function handleScrolledDownChange(didScrollDown: boolean) { startTransition(() => { @@ -49,12 +64,36 @@ function ListImpl<ItemT>( }, }) + let refreshControl + if (refreshing !== undefined || onRefresh !== undefined) { + refreshControl = ( + <RefreshControl + refreshing={refreshing ?? false} + onRefresh={onRefresh} + tintColor={pal.colors.text} + titleColor={pal.colors.text} + progressViewOffset={headerOffset} + /> + ) + } + + let contentOffset + if (headerOffset != null) { + style = addStyle(style, { + paddingTop: headerOffset, + }) + contentOffset = {x: 0, y: headerOffset * -1} + } + return ( <FlatList_INTERNAL {...props} scrollIndicatorInsets={{right: 1}} + contentOffset={contentOffset} + refreshControl={refreshControl} onScroll={scrollHandler} scrollEventThrottle={1} + style={style} ref={ref} /> ) diff --git a/src/view/com/util/PostMeta.tsx b/src/view/com/util/PostMeta.tsx index eef7094cd..b9c3842b3 100644 --- a/src/view/com/util/PostMeta.tsx +++ b/src/view/com/util/PostMeta.tsx @@ -11,6 +11,7 @@ import {sanitizeHandle} from 'lib/strings/handles' import {isAndroid} from 'platform/detection' import {TimeElapsed} from './TimeElapsed' import {makeProfileLink} from 'lib/routes/links' +import {ModerationUI} from '@atproto/api' interface PostMetaOpts { author: { @@ -23,6 +24,7 @@ interface PostMetaOpts { postHref: string timestamp: string showAvatar?: boolean + avatarModeration?: ModerationUI avatarSize?: number displayNameType?: TypographyVariant displayNameStyle?: StyleProp<TextStyle> @@ -41,7 +43,7 @@ let PostMeta = (opts: PostMetaOpts): React.ReactNode => { <UserAvatar avatar={opts.author.avatar} size={opts.avatarSize || 16} - // TODO moderation + moderation={opts.avatarModeration} /> </View> )} diff --git a/src/view/com/util/forms/NativeDropdown.web.tsx b/src/view/com/util/forms/NativeDropdown.web.tsx new file mode 100644 index 000000000..9e9888ad8 --- /dev/null +++ b/src/view/com/util/forms/NativeDropdown.web.tsx @@ -0,0 +1,241 @@ +import React from 'react' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import * as DropdownMenu from '@radix-ui/react-dropdown-menu' +import {Pressable, StyleSheet, View, Text} from 'react-native' +import {IconProp} from '@fortawesome/fontawesome-svg-core' +import {MenuItemCommonProps} from 'zeego/lib/typescript/menu' +import {usePalette} from 'lib/hooks/usePalette' +import {useTheme} from 'lib/ThemeContext' +import {HITSLOP_10} from 'lib/constants' + +// Custom Dropdown Menu Components +// == +export const DropdownMenuRoot = DropdownMenu.Root +export const DropdownMenuContent = DropdownMenu.Content + +type ItemProps = React.ComponentProps<(typeof DropdownMenu)['Item']> +export const DropdownMenuItem = (props: ItemProps & {testID?: string}) => { + const theme = useTheme() + const [focused, setFocused] = React.useState(false) + const backgroundColor = theme.colorScheme === 'dark' ? '#fff1' : '#0001' + + return ( + <DropdownMenu.Item + {...props} + style={StyleSheet.flatten([ + styles.item, + focused && {backgroundColor: backgroundColor}, + ])} + onFocus={() => { + setFocused(true) + }} + onBlur={() => { + setFocused(false) + }} + /> + ) +} + +// Types for Dropdown Menu and Items +export type DropdownItem = { + label: string | 'separator' + onPress?: () => void + testID?: string + icon?: { + ios: MenuItemCommonProps['ios'] + android: string + web: IconProp + } +} +type Props = { + items: DropdownItem[] + testID?: string + accessibilityLabel?: string + accessibilityHint?: string +} + +export function NativeDropdown({ + items, + children, + testID, + accessibilityLabel, + accessibilityHint, +}: React.PropsWithChildren<Props>) { + const pal = usePalette('default') + const theme = useTheme() + const dropDownBackgroundColor = + theme.colorScheme === 'dark' ? pal.btn : pal.view + const [open, setOpen] = React.useState(false) + const buttonRef = React.useRef<HTMLButtonElement>(null) + const menuRef = React.useRef<HTMLDivElement>(null) + const {borderColor: separatorColor} = + theme.colorScheme === 'dark' ? pal.borderDark : pal.border + + React.useEffect(() => { + function clickHandler(e: MouseEvent) { + const t = e.target + + if (!open) return + if (!t) return + if (!buttonRef.current || !menuRef.current) return + + if ( + t !== buttonRef.current && + !buttonRef.current.contains(t as Node) && + t !== menuRef.current && + !menuRef.current.contains(t as Node) + ) { + // prevent clicking through to links beneath dropdown + // only applies to mobile web + e.preventDefault() + e.stopPropagation() + + // close menu + setOpen(false) + } + } + + function keydownHandler(e: KeyboardEvent) { + if (e.key === 'Escape' && open) { + setOpen(false) + } + } + + document.addEventListener('click', clickHandler, true) + window.addEventListener('keydown', keydownHandler, true) + return () => { + document.removeEventListener('click', clickHandler, true) + window.removeEventListener('keydown', keydownHandler, true) + } + }, [open, setOpen]) + + return ( + <DropdownMenuRoot open={open} onOpenChange={o => setOpen(o)}> + <DropdownMenu.Trigger asChild onPointerDown={e => e.preventDefault()}> + <Pressable + ref={buttonRef as unknown as React.Ref<View>} + testID={testID} + accessibilityRole="button" + accessibilityLabel={accessibilityLabel} + accessibilityHint={accessibilityHint} + onPress={() => setOpen(o => !o)} + hitSlop={HITSLOP_10}> + {children} + </Pressable> + </DropdownMenu.Trigger> + + <DropdownMenu.Portal> + <DropdownMenu.Content + ref={menuRef} + style={ + StyleSheet.flatten([ + styles.content, + dropDownBackgroundColor, + ]) as React.CSSProperties + } + loop> + {items.map((item, index) => { + if (item.label === 'separator') { + return ( + <DropdownMenu.Separator + key={getKey(item.label, index, item.testID)} + style={ + StyleSheet.flatten([ + styles.separator, + {backgroundColor: separatorColor}, + ]) as React.CSSProperties + } + /> + ) + } + if (index > 1 && items[index - 1].label === 'separator') { + return ( + <DropdownMenu.Group + key={getKey(item.label, index, item.testID)}> + <DropdownMenuItem + key={getKey(item.label, index, item.testID)} + onSelect={item.onPress}> + <Text + selectable={false} + style={[pal.text, styles.itemTitle]}> + {item.label} + </Text> + {item.icon && ( + <FontAwesomeIcon + icon={item.icon.web} + size={20} + color={pal.colors.textLight} + /> + )} + </DropdownMenuItem> + </DropdownMenu.Group> + ) + } + return ( + <DropdownMenuItem + key={getKey(item.label, index, item.testID)} + onSelect={item.onPress}> + <Text selectable={false} style={[pal.text, styles.itemTitle]}> + {item.label} + </Text> + {item.icon && ( + <FontAwesomeIcon + icon={item.icon.web} + size={20} + color={pal.colors.textLight} + /> + )} + </DropdownMenuItem> + ) + })} + </DropdownMenu.Content> + </DropdownMenu.Portal> + </DropdownMenuRoot> + ) +} + +const getKey = (label: string, index: number, id?: string) => { + if (id) { + return id + } + return `${label}_${index}` +} + +const styles = StyleSheet.create({ + separator: { + height: 1, + marginTop: 4, + marginBottom: 4, + }, + content: { + backgroundColor: '#f0f0f0', + borderRadius: 8, + paddingTop: 4, + paddingBottom: 4, + paddingLeft: 4, + paddingRight: 4, + marginTop: 6, + + // @ts-ignore web only -prf + boxShadow: 'rgba(0, 0, 0, 0.3) 0px 5px 20px', + }, + item: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + columnGap: 20, + // @ts-ignore -web + cursor: 'pointer', + paddingTop: 8, + paddingBottom: 8, + paddingLeft: 12, + paddingRight: 12, + borderRadius: 8, + }, + itemTitle: { + fontSize: 16, + fontWeight: '500', + paddingRight: 10, + }, +}) diff --git a/src/view/com/util/forms/PostDropdownBtn.tsx b/src/view/com/util/forms/PostDropdownBtn.tsx index 193bb9bd7..1f2e067c2 100644 --- a/src/view/com/util/forms/PostDropdownBtn.tsx +++ b/src/view/com/util/forms/PostDropdownBtn.tsx @@ -18,6 +18,7 @@ import {getTranslatorLink} from '#/locale/helpers' import {usePostDeleteMutation} from '#/state/queries/post' import {useMutedThreads, useToggleThreadMute} from '#/state/muted-threads' import {useLanguagePrefs} from '#/state/preferences' +import {useHiddenPosts, useHiddenPostsApi} from '#/state/preferences' import {logger} from '#/logger' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -50,9 +51,12 @@ let PostDropdownBtn = ({ const mutedThreads = useMutedThreads() const toggleThreadMute = useToggleThreadMute() const postDeleteMutation = usePostDeleteMutation() + const hiddenPosts = useHiddenPosts() + const {hidePost} = useHiddenPostsApi() const rootUri = record.reply?.root?.uri || postUri const isThreadMuted = mutedThreads.includes(rootUri) + const isPostHidden = hiddenPosts && hiddenPosts.includes(postUri) const isAuthor = postAuthor.did === currentAccount?.did const href = React.useMemo(() => { const urip = new AtUri(postUri) @@ -98,6 +102,10 @@ let PostDropdownBtn = ({ Linking.openURL(translatorUrl) }, [translatorUrl]) + const onHidePost = React.useCallback(() => { + hidePost({uri: postUri}) + }, [postUri, hidePost]) + const dropdownItems: NativeDropdownItem[] = [ { label: _(msg`Translate`), @@ -159,6 +167,27 @@ let PostDropdownBtn = ({ web: 'comment-slash', }, }, + hasSession && + !isAuthor && + !isPostHidden && { + label: _(msg`Hide post`), + onPress() { + openModal({ + name: 'confirm', + title: _(msg`Hide this post?`), + message: _(msg`This will hide this post from your feeds.`), + onPressConfirm: onHidePost, + }) + }, + testID: 'postDropdownHideBtn', + icon: { + ios: { + name: 'eye.slash', + }, + android: 'ic_menu_delete', + web: ['far', 'eye-slash'], + }, + }, { label: 'separator', }, diff --git a/src/view/com/util/post-ctrls/PostCtrls.tsx b/src/view/com/util/post-ctrls/PostCtrls.tsx index 414fb1e09..a50b52175 100644 --- a/src/view/com/util/post-ctrls/PostCtrls.tsx +++ b/src/view/com/util/post-ctrls/PostCtrls.tsx @@ -31,12 +31,14 @@ let PostCtrls = ({ big, post, record, + showAppealLabelItem, style, onPressReply, }: { big?: boolean post: Shadow<AppBskyFeedDefs.PostView> record: AppBskyFeedPost.Record + showAppealLabelItem?: boolean style?: StyleProp<ViewStyle> onPressReply: () => void }): React.ReactNode => { @@ -207,6 +209,7 @@ let PostCtrls = ({ postCid={post.cid} postUri={post.uri} record={record} + showAppealLabelItem={showAppealLabelItem} style={styles.ctrlPad} /> )} diff --git a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx index d5bb38fb2..27aa804d3 100644 --- a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx +++ b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx @@ -6,22 +6,28 @@ import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' 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' export const ExternalLinkEmbed = ({ link, - imageChild, }: { link: AppBskyEmbedExternal.ViewExternal - imageChild?: React.ReactNode }) => { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() + + const embedPlayerParams = React.useMemo( + () => parseEmbedPlayerFromUrl(link.uri), + [link.uri], + ) + return ( <View style={{ - flexDirection: isMobile ? 'column' : 'row', + flexDirection: !isMobile && !embedPlayerParams ? 'row' : 'column', }}> - {link.thumb ? ( + {link.thumb && !embedPlayerParams ? ( <View style={ !isMobile @@ -45,9 +51,11 @@ export const ExternalLinkEmbed = ({ source={{uri: link.thumb}} accessibilityIgnoresInvertColors /> - {imageChild} </View> ) : undefined} + {embedPlayerParams && ( + <ExternalPlayer link={link} params={embedPlayerParams} /> + )} <View style={{ paddingHorizontal: isMobile ? 10 : 14, diff --git a/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx new file mode 100644 index 000000000..580cf363a --- /dev/null +++ b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx @@ -0,0 +1,251 @@ +import React from 'react' +import { + ActivityIndicator, + Dimensions, + GestureResponderEvent, + Pressable, + StyleSheet, + View, +} from 'react-native' +import {Image} from 'expo-image' +import {WebView} from 'react-native-webview' +import YoutubePlayer from 'react-native-youtube-iframe' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +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' + +interface ShouldStartLoadRequest { + url: string +} + +// This renders the overlay when the player is either inactive or loading as a separate layer +function PlaceholderOverlay({ + isLoading, + isPlayerActive, + onPress, +}: { + isLoading: boolean + isPlayerActive: boolean + onPress: (event: GestureResponderEvent) => void +}) { + // If the player is active and not loading, we don't want to show the overlay. + if (isPlayerActive && !isLoading) return null + + return ( + <View style={[styles.layer, styles.overlayLayer]}> + <Pressable + accessibilityRole="button" + accessibilityLabel="Play Video" + accessibilityHint="" + onPress={onPress} + style={[styles.overlayContainer, styles.topRadius]}> + {!isPlayerActive ? ( + <FontAwesomeIcon icon="play" size={42} color="white" /> + ) : ( + <ActivityIndicator size="large" color="white" /> + )} + </Pressable> + </View> + ) +} + +// This renders the webview/youtube player as a separate layer +function Player({ + height, + params, + onLoad, + isPlayerActive, +}: { + isPlayerActive: boolean + params: EmbedPlayerParams + height: number + onLoad: () => void +}) { + // ensures we only load what's requested + const onShouldStartLoadWithRequest = React.useCallback( + (event: ShouldStartLoadRequest) => event.url === params.playerUri, + [params.playerUri], + ) + + // Don't show the player until it is active + if (!isPlayerActive) return null + + 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> + )} + </EventStopper> + </View> + ) +} + +// This renders the player area and handles the logic for when to show the player and when to show the overlay +export function ExternalPlayer({ + link, + params, +}: { + link: AppBskyEmbedExternal.ViewExternal + params: EmbedPlayerParams +}) { + const navigation = useNavigation<NavigationProp>() + + const [isPlayerActive, setPlayerActive] = React.useState(false) + const [isLoading, setIsLoading] = React.useState(true) + const [dim, setDim] = React.useState({ + width: 0, + height: 0, + }) + + const viewRef = React.useRef<View>(null) + + // watch for leaving the viewport due to scrolling + React.useEffect(() => { + // 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) + return () => { + unsubscribe() + clearInterval(interval) + } + }, [viewRef, navigation]) + + // calculate height for the player and the screen size + const height = React.useMemo( + () => + getPlayerHeight({ + type: params.type, + width: dim.width, + hasThumb: !!link.thumb, + }), + [params.type, dim.width, link.thumb], + ) + + const onLoad = React.useCallback(() => { + setIsLoading(false) + }, []) + + const onPlayPress = React.useCallback((event: GestureResponderEvent) => { + // Prevent this from propagating upward on web + event.preventDefault() + + setPlayerActive(true) + }, []) + + // measure the layout to set sizing + const onLayout = React.useCallback( + (event: {nativeEvent: {layout: {width: any; height: any}}}) => { + setDim({ + width: event.nativeEvent.layout.width, + height: event.nativeEvent.layout.height, + }) + }, + [], + ) + + return ( + <View + ref={viewRef} + style={{height}} + collapsable={false} + onLayout={onLayout}> + {link.thumb && (!isPlayerActive || isLoading) && ( + <Image + style={[ + { + width: dim.width, + height, + }, + styles.topRadius, + ]} + source={{uri: link.thumb}} + accessibilityIgnoresInvertColors + /> + )} + + <PlaceholderOverlay + isLoading={isLoading} + isPlayerActive={isPlayerActive} + onPress={onPlayPress} + /> + <Player + isPlayerActive={isPlayerActive} + params={params} + height={height} + onLoad={onLoad} + /> + </View> + ) +} + +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, + }, + playerLayer: { + zIndex: 3, + }, + webview: { + backgroundColor: 'transparent', + }, +}) diff --git a/src/view/com/util/post-embeds/YoutubeEmbed.tsx b/src/view/com/util/post-embeds/YoutubeEmbed.tsx deleted file mode 100644 index 2f2da5662..000000000 --- a/src/view/com/util/post-embeds/YoutubeEmbed.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native' -import {usePalette} from 'lib/hooks/usePalette' -import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' -import {ExternalLinkEmbed} from './ExternalLinkEmbed' -import {AppBskyEmbedExternal} from '@atproto/api' -import {Link} from '../Link' - -export const YoutubeEmbed = ({ - link, - style, -}: { - link: AppBskyEmbedExternal.ViewExternal - style?: StyleProp<ViewStyle> -}) => { - const pal = usePalette('default') - - const imageChild = ( - <View style={styles.playButton}> - <FontAwesomeIcon icon="play" size={24} color="white" /> - </View> - ) - - return ( - <Link - asAnchor - style={[styles.extOuter, pal.view, pal.border, style]} - href={link.uri}> - <ExternalLinkEmbed link={link} imageChild={imageChild} /> - </Link> - ) -} - -const styles = StyleSheet.create({ - extOuter: { - borderWidth: 1, - borderRadius: 8, - }, - playButton: { - position: 'absolute', - alignSelf: 'center', - alignItems: 'center', - top: '44%', - justifyContent: 'center', - backgroundColor: 'black', - padding: 10, - borderRadius: 50, - opacity: 0.8, - }, - webView: { - alignItems: 'center', - alignContent: 'center', - justifyContent: 'center', - }, -}) diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index 2814cad87..c94ce9684 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -23,9 +23,7 @@ import {ImageLayoutGrid} from '../images/ImageLayoutGrid' import {useLightboxControls, ImagesLightbox} from '#/state/lightbox' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' -import {YoutubeEmbed} from './YoutubeEmbed' import {ExternalLinkEmbed} from './ExternalLinkEmbed' -import {getYoutubeVideoId} from 'lib/strings/url-helpers' import {MaybeQuoteEmbed} from './QuoteEmbed' import {AutoSizedImage} from '../images/AutoSizedImage' import {ListEmbed} from './ListEmbed' @@ -168,19 +166,13 @@ export function PostEmbeds({ // = if (AppBskyEmbedExternal.isView(embed)) { const link = embed.external - const youtubeVideoId = getYoutubeVideoId(link.uri) - - if (youtubeVideoId) { - return <YoutubeEmbed link={link} style={style} /> - } return ( - <Link - asAnchor - style={[styles.extOuter, pal.view, pal.border, style]} - href={link.uri}> - <ExternalLinkEmbed link={link} /> - </Link> + <View style={[styles.extOuter, pal.view, pal.border, style]}> + <Link asAnchor href={link.uri}> + <ExternalLinkEmbed link={link} /> + </Link> + </View> ) } diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx index 1c8bdf9f0..20cdf815a 100644 --- a/src/view/screens/Feeds.tsx +++ b/src/view/screens/Feeds.tsx @@ -1,5 +1,5 @@ import React from 'react' -import {ActivityIndicator, StyleSheet, View, RefreshControl} from 'react-native' +import {ActivityIndicator, StyleSheet, View} from 'react-native' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {FontAwesomeIconStyle} from '@fortawesome/react-native-fontawesome' import {ViewHeader} from 'view/com/util/ViewHeader' @@ -487,14 +487,8 @@ export function FeedsScreen(_props: Props) { keyExtractor={item => item.key} contentContainerStyle={styles.contentContainer} renderItem={renderItem} - refreshControl={ - <RefreshControl - refreshing={isPTR} - onRefresh={isUserSearching ? undefined : onPullToRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTR} + onRefresh={isUserSearching ? undefined : onPullToRefresh} initialNumToRender={10} onEndReached={onEndReached} // @ts-ignore our .web version only -prf diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 82dd1365c..b8033f0b4 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -18,11 +18,13 @@ import {emitSoftReset} from '#/state/events' import {useSession} from '#/state/session' import {loadString, saveString} from '#/lib/storage' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' +import {clamp} from '#/lib/numbers' type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'> export function HomeScreen(props: Props) { const {data: preferences} = usePreferencesQuery() - const {feeds: pinnedFeeds} = usePinnedFeedsInfos() + const {feeds: pinnedFeeds, isLoading: isPinnedFeedsLoading} = + usePinnedFeedsInfos() const {isDesktop} = useWebMediaQueries() const [initialPage, setInitialPage] = React.useState<string | undefined>( undefined, @@ -41,7 +43,12 @@ export function HomeScreen(props: Props) { loadLastActivePage() }, []) - if (preferences && pinnedFeeds && initialPage !== undefined) { + if ( + preferences && + pinnedFeeds && + initialPage !== undefined && + !isPinnedFeedsLoading + ) { return ( <HomeScreenReady {...props} @@ -172,7 +179,7 @@ function HomeScreenReady({ <Pager key={pinnedFeedOrderKey} testID="homeScreen" - initialPage={selectedPageIndex} + initialPage={clamp(selectedPageIndex, 0, customFeeds.length)} onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} renderTabBar={renderTabBar} diff --git a/src/view/screens/ModerationBlockedAccounts.tsx b/src/view/screens/ModerationBlockedAccounts.tsx index 8f6e2f729..bada3ea93 100644 --- a/src/view/screens/ModerationBlockedAccounts.tsx +++ b/src/view/screens/ModerationBlockedAccounts.tsx @@ -92,6 +92,7 @@ export function ModerationBlockedAccounts({}: Props) { testID={`blockedAccount-${index}`} key={item.did} profile={item} + noModFilter /> ) return ( diff --git a/src/view/screens/ModerationMutedAccounts.tsx b/src/view/screens/ModerationMutedAccounts.tsx index 41aee9f2f..67118e530 100644 --- a/src/view/screens/ModerationMutedAccounts.tsx +++ b/src/view/screens/ModerationMutedAccounts.tsx @@ -92,6 +92,7 @@ export function ModerationMutedAccounts({}: Props) { testID={`mutedAccount-${index}`} key={item.did} profile={item} + noModFilter /> ) return ( diff --git a/src/view/screens/Notifications.tsx b/src/view/screens/Notifications.tsx index e28a67e37..6e2f18305 100644 --- a/src/view/screens/Notifications.tsx +++ b/src/view/screens/Notifications.tsx @@ -1,6 +1,6 @@ import React from 'react' import {View} from 'react-native' -import {useFocusEffect} from '@react-navigation/native' +import {useFocusEffect, useIsFocused} from '@react-navigation/native' import {useQueryClient} from '@tanstack/react-query' import { NativeStackScreenProps, @@ -46,6 +46,7 @@ export function NotificationsScreen({}: Props) { const unreadNotifs = useUnreadNotifications() const unreadApi = useUnreadNotificationsApi() const hasNew = !!unreadNotifs + const isScreenFocused = useIsFocused() // event handlers // = @@ -83,8 +84,11 @@ export function NotificationsScreen({}: Props) { }, [screen, setMinimalShellMode]), ) React.useEffect(() => { + if (!isScreenFocused) { + return + } return listenSoftReset(onPressLoadLatest) - }, [onPressLoadLatest]) + }, [onPressLoadLatest, isScreenFocused]) const ListHeaderComponent = React.useCallback(() => { if (isDesktop) { diff --git a/src/view/screens/PreferencesHomeFeed.tsx b/src/view/screens/PreferencesHomeFeed.tsx index fe17be5e8..20ef72923 100644 --- a/src/view/screens/PreferencesHomeFeed.tsx +++ b/src/view/screens/PreferencesHomeFeed.tsx @@ -117,7 +117,7 @@ export function PreferencesHomeFeed({navigation}: Props) { <ToggleButton testID="toggleRepliesBtn" type="default-light" - label={showReplies ? 'Yes' : 'No'} + label={showReplies ? _(msg`Yes`) : _(msg`No`)} isSelected={showReplies} onPress={() => setFeedViewPref({ diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index f1c648a67..4558ae33d 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -39,6 +39,7 @@ import {truncateAndInvalidate} from '#/state/queries/util' import {Text} from '#/view/com/util/text/Text' import {usePalette} from 'lib/hooks/usePalette' import {isNative} from '#/platform/detection' +import {isInvalidHandle} from '#/lib/strings/handles' interface SectionRef { scrollToTop: () => void @@ -231,7 +232,7 @@ function ProfileScreenLoaded({ track('ProfileScreen:PressCompose') const mention = profile.handle === currentAccount?.handle || - profile.handle === 'handle.invalid' + isInvalidHandle(profile.handle) ? undefined : profile.handle openComposer({mention}) diff --git a/src/view/screens/ProfileFeed.tsx b/src/view/screens/ProfileFeed.tsx index cde39a33f..211306c0d 100644 --- a/src/view/screens/ProfileFeed.tsx +++ b/src/view/screens/ProfileFeed.tsx @@ -57,6 +57,7 @@ import {useLikeMutation, useUnlikeMutation} from '#/state/queries/like' import {useComposerControls} from '#/state/shell/composer' import {truncateAndInvalidate} from '#/state/queries/util' import {isNative} from '#/platform/detection' +import {listenSoftReset} from '#/state/events' const SECTION_TITLES = ['Posts', 'About'] @@ -446,6 +447,7 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( const [hasNew, setHasNew] = React.useState(false) const [isScrolledDown, setIsScrolledDown] = React.useState(false) const queryClient = useQueryClient() + const isScreenFocused = useIsFocused() const onScrollToTop = useCallback(() => { scrollElRef.current?.scrollToOffset({ @@ -460,6 +462,13 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( scrollToTop: onScrollToTop, })) + React.useEffect(() => { + if (!isScreenFocused) { + return + } + return listenSoftReset(onScrollToTop) + }, [onScrollToTop, isScreenFocused]) + const renderPostsEmpty = useCallback(() => { return <EmptyState icon="feed" message="This feed is empty!" /> }, []) diff --git a/src/view/screens/ProfileList.tsx b/src/view/screens/ProfileList.tsx index 2db768cc5..c51758ae5 100644 --- a/src/view/screens/ProfileList.tsx +++ b/src/view/screens/ProfileList.tsx @@ -57,6 +57,7 @@ import { } from '#/state/queries/preferences' import {logger} from '#/logger' import {useAnalytics} from '#/lib/analytics/analytics' +import {listenSoftReset} from '#/state/events' const SECTION_TITLES_CURATE = ['Posts', 'About'] const SECTION_TITLES_MOD = ['About'] @@ -601,6 +602,7 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( const queryClient = useQueryClient() const [hasNew, setHasNew] = React.useState(false) const [isScrolledDown, setIsScrolledDown] = React.useState(false) + const isScreenFocused = useIsFocused() const onScrollToTop = useCallback(() => { scrollElRef.current?.scrollToOffset({ @@ -614,6 +616,13 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( scrollToTop: onScrollToTop, })) + React.useEffect(() => { + if (!isScreenFocused) { + return + } + return listenSoftReset(onScrollToTop) + }, [onScrollToTop, isScreenFocused]) + const renderPostsEmpty = useCallback(() => { return <EmptyState icon="feed" message="This feed is empty!" /> }, []) diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index 892dbb5f1..d1fe700b7 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -3,7 +3,6 @@ import { View, StyleSheet, ActivityIndicator, - RefreshControl, TextInput, Pressable, Platform, @@ -185,7 +184,6 @@ type SearchResultSlice = function SearchScreenPostResults({query}: {query: string}) { const {_} = useLingui() - const pal = usePalette('default') const [isPTR, setIsPTR] = React.useState(false) const { isFetched, @@ -214,12 +212,17 @@ function SearchScreenPostResults({query}: {query: string}) { const items = React.useMemo(() => { let temp: SearchResultSlice[] = [] + const seenUris = new Set() for (const post of posts) { + if (seenUris.has(post.uri)) { + continue + } temp.push({ type: 'post', key: post.uri, post, }) + seenUris.add(post.uri) } if (isFetchingNextPage) { @@ -254,14 +257,8 @@ function SearchScreenPostResults({query}: {query: string}) { } }} keyExtractor={item => item.key} - refreshControl={ - <RefreshControl - refreshing={isPTR} - onRefresh={onPullToRefresh} - tintColor={pal.colors.text} - titleColor={pal.colors.text} - /> - } + refreshing={isPTR} + onRefresh={onPullToRefresh} onEndReached={onEndReached} // @ts-ignore web only -prf desktopFixedHeight diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index b7ba32b0d..d48112dae 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -20,7 +20,7 @@ import * as AppInfo from 'lib/app-info' import {s, colors} from 'lib/styles' import {ScrollView} from '../com/util/Views' import {ViewHeader} from '../com/util/ViewHeader' -import {Link} from '../com/util/Link' +import {Link, TextLink} from '../com/util/Link' import {Text} from '../com/util/text/Text' import * as Toast from '../com/util/Toast' import {UserAvatar} from '../com/util/UserAvatar' @@ -721,7 +721,7 @@ export function SettingsScreen({}: Props) { </Text> </TouchableOpacity> <Text type="sm" style={[pal.textLight]}> - · + · </Text> <TouchableOpacity accessibilityRole="button" @@ -731,6 +731,25 @@ export function SettingsScreen({}: Props) { </Text> </TouchableOpacity> </View> + + <View + style={[ + {flexWrap: 'wrap', gap: 12, paddingHorizontal: 18}, + s.flexRow, + ]}> + <TextLink + type="md" + style={pal.link} + href="https://blueskyweb.xyz/support/tos" + text={_(msg`Terms of Service`)} + /> + <TextLink + type="md" + style={pal.link} + href="https://blueskyweb.xyz/support/privacy-policy" + text={_(msg`Privacy Policy`)} + /> + </View> <View style={s.footerSpacer} /> </ScrollView> </View> diff --git a/src/view/shell/Drawer.tsx b/src/view/shell/Drawer.tsx index e5d2a3863..14bc6af26 100644 --- a/src/view/shell/Drawer.tsx +++ b/src/view/shell/Drawer.tsx @@ -51,6 +51,7 @@ import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {emitSoftReset} from '#/state/events' import {useInviteCodesQuery} from '#/state/queries/invites' import {NavSignupCard} from '#/view/shell/NavSignupCard' +import {TextLink} from '../com/util/Link' let DrawerProfileCard = ({ account, @@ -106,6 +107,7 @@ export {DrawerProfileCard} let DrawerContent = ({}: {}): React.ReactNode => { const theme = useTheme() const pal = usePalette('default') + const {_} = useLingui() const setDrawerOpen = useSetDrawerOpen() const navigation = useNavigation<NavigationProp>() const {track} = useAnalytics() @@ -245,6 +247,23 @@ let DrawerContent = ({}: {}): React.ReactNode => { )} <View style={styles.smallSpacer} /> + + <View style={[{flexWrap: 'wrap', gap: 12}, s.flexCol]}> + <TextLink + type="md" + style={pal.link} + href="https://blueskyweb.xyz/support/tos" + text={_(msg`Terms of Service`)} + /> + <TextLink + type="md" + style={pal.link} + href="https://blueskyweb.xyz/support/privacy-policy" + text={_(msg`Privacy Policy`)} + /> + </View> + + <View style={styles.smallSpacer} /> <View style={styles.smallSpacer} /> </ScrollView> diff --git a/src/view/shell/desktop/Feeds.tsx b/src/view/shell/desktop/Feeds.tsx index 530d606f2..a8f5f1c66 100644 --- a/src/view/shell/desktop/Feeds.tsx +++ b/src/view/shell/desktop/Feeds.tsx @@ -86,6 +86,7 @@ function FeedItem({ const styles = StyleSheet.create({ container: { flex: 1, + // @ts-ignore web only -prf overflowY: 'auto', width: 300, paddingHorizontal: 12, diff --git a/src/view/shell/desktop/LeftNav.tsx b/src/view/shell/desktop/LeftNav.tsx index df6cb6499..f3c8c1d11 100644 --- a/src/view/shell/desktop/LeftNav.tsx +++ b/src/view/shell/desktop/LeftNav.tsx @@ -46,6 +46,7 @@ import {useComposerControls} from '#/state/shell/composer' import {useFetchHandle} from '#/state/queries/handle' import {emitSoftReset} from '#/state/events' import {NavSignupCard} from '#/view/shell/NavSignupCard' +import {isInvalidHandle} from '#/lib/strings/handles' function ProfileCard() { const {currentAccount} = useSession() @@ -221,7 +222,7 @@ function ComposeBtn() { if ( !handle || handle === currentAccount?.handle || - handle === 'handle.invalid' + isInvalidHandle(handle) ) return undefined |