diff --git a/__tests__/lib/string.test.ts b/__tests__/lib/string.test.ts index 63bd785ea7..99b0d25373 100644 --- a/__tests__/lib/string.test.ts +++ b/__tests__/lib/string.test.ts @@ -1,6 +1,5 @@ import {RichText} from '@atproto/api' import { - getYoutubeVideoId, makeRecordUri, toNiceDomain, toShortUrl, @@ -12,6 +11,7 @@ import {detectLinkables} from '../../src/lib/strings/rich-text-detection' import {shortenLinks} from '../../src/lib/strings/rich-text-manip' import {makeValidHandle, createFullHandle} from '../../src/lib/strings/handles' import {cleanError} from '../../src/lib/strings/errors' +import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' describe('detectLinkables', () => { const inputs = [ @@ -335,32 +335,6 @@ describe('toShareUrl', () => { }) }) -describe('getYoutubeVideoId', () => { - it(' should return undefined for invalid youtube links', () => { - expect(getYoutubeVideoId('')).toBeUndefined() - expect(getYoutubeVideoId('https://www.google.com')).toBeUndefined() - expect(getYoutubeVideoId('https://www.youtube.com')).toBeUndefined() - expect( - getYoutubeVideoId('https://www.youtube.com/channelName'), - ).toBeUndefined() - expect( - getYoutubeVideoId('https://www.youtube.com/channel/channelName'), - ).toBeUndefined() - }) - - it('getYoutubeVideoId should return video id for valid youtube links', () => { - expect(getYoutubeVideoId('https://www.youtube.com/watch?v=videoId')).toBe( - 'videoId', - ) - expect( - getYoutubeVideoId( - 'https://www.youtube.com/watch?v=videoId&feature=share', - ), - ).toBe('videoId') - expect(getYoutubeVideoId('https://youtu.be/videoId')).toBe('videoId') - }) -}) - describe('shortenLinks', () => { const inputs = [ 'start https://middle.com/foo/bar?baz=bux#hash end', @@ -396,6 +370,7 @@ describe('shortenLinks', () => { ], ], ] + it('correctly shortens rich text while preserving facet URIs', () => { for (let i = 0; i < inputs.length; i++) { const input = inputs[i] @@ -410,3 +385,141 @@ describe('shortenLinks', () => { } }) }) + +describe('parseEmbedPlayerFromUrl', () => { + const inputs = [ + 'https://youtu.be/videoId', + 'https://www.youtube.com/watch?v=videoId', + 'https://www.youtube.com/watch?v=videoId&feature=share', + 'https://youtube.com/watch?v=videoId', + 'https://youtube.com/watch?v=videoId&feature=share', + 'https://youtube.com/shorts/videoId', + + 'https://youtube.com/shorts/', + 'https://youtube.com/', + 'https://youtube.com/random', + + 'https://twitch.tv/channelName', + 'https://www.twitch.tv/channelName', + + 'https://open.spotify.com/playlist/playlistId', + 'https://open.spotify.com/playlist/playlistId?param=value', + + 'https://open.spotify.com/track/songId', + 'https://open.spotify.com/track/songId?param=value', + + 'https://open.spotify.com/album/albumId', + 'https://open.spotify.com/album/albumId?param=value', + + 'https://soundcloud.com/user/track', + 'https://soundcloud.com/user/sets/set', + 'https://soundcloud.com/user/', + ] + + const outputs = [ + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + { + type: 'youtube_video', + videoId: 'videoId', + playerUri: 'https://www.youtube.com/embed/videoId?autoplay=1', + }, + undefined, + undefined, + undefined, + + { + type: 'twitch_live', + channelId: 'channelName', + playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=channelName&parent=localhost`, + }, + { + type: 'twitch_live', + channelId: 'channelName', + playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=channelName&parent=localhost`, + }, + + { + type: 'spotify_playlist', + playlistId: 'playlistId', + playerUri: `https://open.spotify.com/embed/playlist/playlistId`, + }, + { + type: 'spotify_playlist', + playlistId: 'playlistId', + playerUri: `https://open.spotify.com/embed/playlist/playlistId`, + }, + + { + type: 'spotify_song', + songId: 'songId', + playerUri: `https://open.spotify.com/embed/track/songId`, + }, + { + type: 'spotify_song', + songId: 'songId', + playerUri: `https://open.spotify.com/embed/track/songId`, + }, + + { + type: 'spotify_album', + albumId: 'albumId', + playerUri: `https://open.spotify.com/embed/album/albumId`, + }, + { + type: 'spotify_album', + albumId: 'albumId', + playerUri: `https://open.spotify.com/embed/album/albumId`, + }, + + { + type: 'soundcloud_track', + user: 'user', + track: 'track', + playerUri: `https://w.soundcloud.com/player/?url=https://soundcloud.com/user/track&auto_play=true&visual=false&hide_related=true`, + }, + { + type: 'soundcloud_set', + user: 'user', + set: 'set', + playerUri: `https://w.soundcloud.com/player/?url=https://soundcloud.com/user/sets/set&auto_play=true&visual=false&hide_related=true`, + }, + undefined, + ] + + it('correctly grabs the correct id from uri', () => { + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i] + const output = outputs[i] + + const res = parseEmbedPlayerFromUrl(input) + + console.log(input) + + expect(res).toEqual(output) + } + }) +}) diff --git a/app.config.js b/app.config.js index ea41b4905e..312b9ea201 100644 --- a/app.config.js +++ b/app.config.js @@ -9,12 +9,12 @@ module.exports = function () { /** * iOS build number. Must be incremented for each TestFlight version. */ - const IOS_BUILD_NUMBER = '4' + const IOS_BUILD_NUMBER = '2' /** * Android build number. Must be incremented for each release. */ - const ANDROID_VERSION_CODE = 50 + const ANDROID_VERSION_CODE = 53 /** * Uses built-in Expo env vars @@ -110,6 +110,9 @@ module.exports = function () { [ 'expo-build-properties', { + ios: { + deploymentTarget: '13.4', + }, android: { compileSdkVersion: 34, targetSdkVersion: 34, diff --git a/assets/icon-android-background.png b/assets/icon-android-background.png index d6027131bb..2c9d153823 100644 Binary files a/assets/icon-android-background.png and b/assets/icon-android-background.png differ diff --git a/assets/icon.png b/assets/icon.png index 5d8ae67df8..75866fc827 100644 Binary files a/assets/icon.png and b/assets/icon.png differ diff --git a/babel.config.js b/babel.config.js index 825916676a..43b2c7bce3 100644 --- a/babel.config.js +++ b/babel.config.js @@ -42,6 +42,7 @@ module.exports = function (api) { platform: './src/platform', state: './src/state', view: './src/view', + crypto: './src/platform/crypto.ts', }, }, ], diff --git a/bskyweb/cmd/bskyweb/rss.go b/bskyweb/cmd/bskyweb/rss.go index f7caf8fe75..64e67fd228 100644 --- a/bskyweb/cmd/bskyweb/rss.go +++ b/bskyweb/cmd/bskyweb/rss.go @@ -1,8 +1,11 @@ package main import ( + "encoding/xml" "fmt" "net/http" + "strings" + "time" appbsky "github.com/bluesky-social/indigo/api/bsky" "github.com/bluesky-social/indigo/atproto/syntax" @@ -10,6 +13,12 @@ import ( "github.com/labstack/echo/v4" ) +type ItemGUID struct { + XMLName xml.Name `xml:"guid"` + Value string `xml:",chardata"` + IsPerma bool `xml:"isPermaLink,attr"` +} + // We don't actually populate the title for "posts". // Some background: https://book.micro.blog/rss-for-microblogs/ type Item struct { @@ -17,8 +26,7 @@ type Item struct { Link string `xml:"link,omitempty"` Description string `xml:"description,omitempty"` PubDate string `xml:"pubDate,omitempty"` - Author string `xml:"author,omitempty"` - GUID string `xml:"guid,omitempty"` + GUID ItemGUID } type rss struct { @@ -32,11 +40,33 @@ type rss struct { func (srv *Server) WebProfileRSS(c echo.Context) error { ctx := c.Request().Context() + req := c.Request() - didParam := c.Param("did") - did, err := syntax.ParseDID(didParam) + identParam := c.Param("ident") + + // if not a DID, try parsing as a handle and doing a redirect + if !strings.HasPrefix(identParam, "did:") { + handle, err := syntax.ParseHandle(identParam) + if err != nil { + return echo.NewHTTPError(400, fmt.Sprintf("not a valid handle: %s", identParam)) + } + + // check that public view is Ok, and resolve DID + pv, err := appbsky.ActorGetProfile(ctx, srv.xrpcc, handle.String()) + if err != nil { + return echo.NewHTTPError(404, fmt.Sprintf("account not found: %s", handle)) + } + for _, label := range pv.Labels { + if label.Src == pv.Did && label.Val == "!no-unauthenticated" { + return echo.NewHTTPError(403, fmt.Sprintf("account does not allow public views: %s", handle)) + } + } + return c.Redirect(http.StatusFound, fmt.Sprintf("/profile/%s/rss", pv.Did)) + } + + did, err := syntax.ParseDID(identParam) if err != nil { - return echo.NewHTTPError(400, fmt.Sprintf("not a valid DID: %s", didParam)) + return echo.NewHTTPError(400, fmt.Sprintf("not a valid DID: %s", identParam)) } // check that public view is Ok @@ -71,12 +101,19 @@ func (srv *Server) WebProfileRSS(c echo.Context) error { if rec.Reply != nil { continue } + pubDate := "" + createdAt, err := syntax.ParseDatetimeLenient(rec.CreatedAt) + if nil == err { + pubDate = createdAt.Time().Format(time.RFC822Z) + } posts = append(posts, Item{ - Link: fmt.Sprintf("https://bsky.app/profile/%s/post/%s", pv.Handle, aturi.RecordKey().String()), + Link: fmt.Sprintf("https://%s/profile/%s/post/%s", req.Host, pv.Handle, aturi.RecordKey().String()), Description: rec.Text, - PubDate: rec.CreatedAt, - Author: "@" + pv.Handle, - GUID: aturi.String(), + PubDate: pubDate, + GUID: ItemGUID{ + Value: aturi.String(), + IsPerma: false, + }, }) } @@ -91,7 +128,7 @@ func (srv *Server) WebProfileRSS(c echo.Context) error { feed := &rss{ Version: "2.0", Description: desc, - Link: fmt.Sprintf("https://bsky.app/profile/%s", pv.Handle), + Link: fmt.Sprintf("https://%s/profile/%s", req.Host, pv.Handle), Title: title, Item: posts, } diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go index 5d9a481fe2..7a3b8bf16a 100644 --- a/bskyweb/cmd/bskyweb/server.go +++ b/bskyweb/cmd/bskyweb/server.go @@ -210,7 +210,7 @@ func serve(cctx *cli.Context) error { e.GET("/profile/:handle/feed/:rkey/liked-by", server.WebGeneric) // profile RSS feed (DID not handle) - e.GET("/profile/:did/rss", server.WebProfileRSS) + e.GET("/profile/:ident/rss", server.WebProfileRSS) // post endpoints; only first populates info e.GET("/profile/:handle/post/:rkey", server.WebPost) @@ -336,7 +336,11 @@ func (srv *Server) WebPost(c echo.Context) error { data["postView"] = postView data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path) if postView.Embed != nil && postView.Embed.EmbedImages_View != nil { - data["imgThumbUrl"] = postView.Embed.EmbedImages_View.Images[0].Thumb + var thumbUrls []string + for i := range postView.Embed.EmbedImages_View.Images { + thumbUrls = append(thumbUrls, postView.Embed.EmbedImages_View.Images[i].Thumb) + } + data["imgThumbUrls"] = thumbUrls } return c.Render(http.StatusOK, "post.html", data) } @@ -370,6 +374,7 @@ func (srv *Server) WebProfile(c echo.Context) error { req := c.Request() data["profileView"] = pv data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path) + data["requestHost"] = req.Host return c.Render(http.StatusOK, "profile.html", data) } diff --git a/bskyweb/static/apple-touch-icon.png b/bskyweb/static/apple-touch-icon.png index 5ebb6787c9..09393a7413 100644 Binary files a/bskyweb/static/apple-touch-icon.png and b/bskyweb/static/apple-touch-icon.png differ diff --git a/bskyweb/static/favicon-16x16.png b/bskyweb/static/favicon-16x16.png index 4267562b80..ea256e0569 100644 Binary files a/bskyweb/static/favicon-16x16.png and b/bskyweb/static/favicon-16x16.png differ diff --git a/bskyweb/static/favicon-32x32.png b/bskyweb/static/favicon-32x32.png index 869f6df5fc..a5ca7eed1e 100644 Binary files a/bskyweb/static/favicon-32x32.png and b/bskyweb/static/favicon-32x32.png differ diff --git a/bskyweb/static/favicon.ico b/bskyweb/static/favicon.ico deleted file mode 100644 index b4290a797a..0000000000 Binary files a/bskyweb/static/favicon.ico and /dev/null differ diff --git a/bskyweb/static/favicon.png b/bskyweb/static/favicon.png index 61cf7c943b..ddf55f4c81 100644 Binary files a/bskyweb/static/favicon.png and b/bskyweb/static/favicon.png differ diff --git a/bskyweb/static/social-card-default.png b/bskyweb/static/social-card-default.png index 3bb93c799c..00a85b8cf5 100644 Binary files a/bskyweb/static/social-card-default.png and b/bskyweb/static/social-card-default.png differ diff --git a/bskyweb/templates/post.html b/bskyweb/templates/post.html index 55a0679fbd..307f80bbb4 100644 --- a/bskyweb/templates/post.html +++ b/bskyweb/templates/post.html @@ -25,8 +25,10 @@ {% endif -%} - {%- if imgThumbUrl %} + {%- if imgThumbUrls %} + {% for imgThumbUrl in imgThumbUrls %} + {% endfor %} {%- elif postView.Author.Avatar %} {# Don't use avatar image in cards; usually looks bad #} diff --git a/bskyweb/templates/profile.html b/bskyweb/templates/profile.html index 71c1003278..551dc15a66 100644 --- a/bskyweb/templates/profile.html +++ b/bskyweb/templates/profile.html @@ -34,7 +34,9 @@ {% endif %} - + {%- if requestHost %} + + {% endif %} {% endif -%} {%- endblock %} diff --git a/docs/localization.md b/docs/localization.md index b3dce7b418..0de2447952 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -32,7 +32,7 @@ import { Text } from "react-native"; const text = "Hello World"; {text} ``` -In this case, you cannot use the `useLingui()` hook: +In this case, you can use the `useLingui()` hook: ```jsx import { msg } from "@lingui/macro"; import { useLingui } from "@lingui/react"; @@ -116,4 +116,4 @@ export function Welcome() { ### Credits Please check each individual `messages.po` file for the credits of the translators. We are very grateful for their help! -If you would like to translate the Bluesky app into your language, please open a PR or issue on this repo. \ No newline at end of file +If you would like to translate the Bluesky app into your language, please open a PR or issue on this repo. diff --git a/lingui.config.js b/lingui.config.js index 118798a0a8..58e8d65c57 100644 --- a/lingui.config.js +++ b/lingui.config.js @@ -1,6 +1,6 @@ /** @type {import('@lingui/conf').LinguiConfig} */ module.exports = { - locales: ['en', 'hi', 'ja'], + locales: ['en', 'hi', 'ja', 'fr', 'de', 'es'], catalogs: [ { path: '/src/locale/locales/{locale}/messages', diff --git a/package.json b/package.json index bed17e9dc2..01f3a02bc9 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,13 @@ { "name": "bsky.app", - "version": "1.60.0", + "version": "1.62.0", "private": true, + "engines": { + "node": ">=18" + }, "scripts": { "prepare": "is-ci || husky install", - "postinstall": "patch-package", + "postinstall": "patch-package && yarn intl:compile", "prebuild": "expo prebuild --clean", "android": "expo run:android", "ios": "expo run:ios", @@ -32,7 +35,8 @@ "intl:build": "yarn intl:check && yarn intl:compile", "intl:check": "yarn intl:extract && git diff-index -G'(^[^\\*# /])|(^#\\w)|(^\\s+[^\\*#/])' HEAD || (echo '\n⚠️ i18n detected un-extracted translations\n' && exit 1)", "intl:extract": "lingui extract", - "intl:compile": "lingui compile" + "intl:compile": "lingui compile", + "nuke": "rm -rf ./node_modules && rm -rf ./ios && rm -rf ./android" }, "dependencies": { "@atproto/api": "^0.7.4", @@ -49,14 +53,14 @@ "@lingui/react": "^4.5.0", "@mattermost/react-native-paste-input": "^0.6.4", "@miblanchard/react-native-slider": "^2.3.1", - "@react-native-async-storage/async-storage": "1.18.2", + "@react-native-async-storage/async-storage": "1.21.0", "@react-native-camera-roll/camera-roll": "^5.2.2", "@react-native-clipboard/clipboard": "^1.10.0", "@react-native-community/blur": "^4.3.0", - "@react-native-community/datetimepicker": "7.2.0", - "@react-native-masked-view/masked-view": "^0.3.1", + "@react-native-community/datetimepicker": "7.6.1", + "@react-native-masked-view/masked-view": "0.3.0", "@react-native-menu/menu": "^0.8.0", - "@react-native-picker/picker": "2.4.10", + "@react-native-picker/picker": "2.5.1", "@react-navigation/bottom-tabs": "^6.5.7", "@react-navigation/drawer": "^6.6.2", "@react-navigation/native": "^6.1.6", @@ -65,7 +69,7 @@ "@segment/analytics-react": "^1.0.0-rc1", "@segment/analytics-react-native": "^2.10.1", "@segment/sovran-react-native": "^0.4.5", - "@sentry/react-native": "5.10.0", + "@sentry/react-native": "5.5.0", "@tanstack/react-query": "^5.8.1", "@tiptap/core": "^2.0.0-beta.220", "@tiptap/extension-document": "^2.0.0-beta.220", @@ -90,24 +94,25 @@ "email-validator": "^2.0.4", "emoji-mart": "^5.5.2", "eventemitter3": "^5.0.1", - "expo": "^49.0.8", - "expo-application": "~5.3.0", - "expo-build-properties": "~0.8.3", - "expo-camera": "13.5.1", - "expo-constants": "~14.4.2", - "expo-dev-client": "2.4.7", - "expo-device": "~5.4.0", - "expo-image": "~1.3.2", - "expo-image-manipulator": "~11.5.0", - "expo-image-picker": "~14.5.0", - "expo-localization": "~14.3.0", - "expo-media-library": "~15.4.1", - "expo-notifications": "~0.20.1", - "expo-sharing": "~11.5.0", - "expo-splash-screen": "~0.20.5", - "expo-status-bar": "~1.6.0", - "expo-system-ui": "~2.4.0", - "expo-updates": "~0.18.12", + "expo": "^50.0.0-preview.7", + "expo-application": "~5.8.1", + "expo-build-properties": "^0.11.0", + "expo-camera": "~14.0.1", + "expo-constants": "~15.4.2", + "expo-dev-client": "~3.3.4", + "expo-device": "~5.9.1", + "expo-image": "~1.10.1", + "expo-image-manipulator": "^11.8.0", + "expo-image-picker": "~14.7.1", + "expo-localization": "~14.8.1", + "expo-media-library": "~15.9.1", + "expo-notifications": "~0.27.2", + "expo-sharing": "^11.10.0", + "expo-splash-screen": "~0.26.1", + "expo-status-bar": "~1.11.1", + "expo-system-ui": "~2.9.2", + "expo-task-manager": "~11.7.0", + "expo-updates": "~0.24.5", "fast-text-encoding": "^1.0.6", "history": "^5.3.0", "js-sha256": "^0.9.0", @@ -135,31 +140,34 @@ "react-avatar-editor": "^13.0.0", "react-circular-progressbar": "^2.1.0", "react-dom": "^18.2.0", - "react-native": "0.72.5", + "react-native": "0.73.1", "react-native-appstate-hook": "^1.0.6", - "react-native-drawer-layout": "^3.2.0", + "react-native-drawer-layout": "^4.0.0-alpha.3", "react-native-fs": "^2.20.0", - "react-native-gesture-handler": "^2.12.1", - "react-native-get-random-values": "^1.8.0", + "react-native-gesture-handler": "~2.14.0", + "react-native-get-random-values": "~1.8.0", "react-native-haptic-feedback": "^1.14.0", "react-native-image-crop-picker": "^0.38.1", "react-native-inappbrowser-reborn": "^3.6.3", "react-native-ios-context-menu": "^1.15.3", "react-native-linear-gradient": "^2.6.2", - "react-native-pager-view": "6.1.4", + "react-native-pager-view": "6.2.2", "react-native-picker-select": "^8.1.0", "react-native-progress": "bluesky-social/react-native-progress", "react-native-reanimated": "^3.6.0", "react-native-root-siblings": "^4.1.1", - "react-native-safe-area-context": "4.6.3", - "react-native-screens": "~3.22.0", + "react-native-safe-area-context": "4.7.4", + "react-native-screens": "~3.27.0", "react-native-splash-screen": "^3.3.0", - "react-native-svg": "13.9.0", + "react-native-svg": "14.0.0", "react-native-url-polyfill": "^1.3.0", "react-native-uuid": "^2.0.1", "react-native-version-number": "^0.3.6", "react-native-web": "~0.19.6", "react-native-web-linear-gradient": "^1.1.2", + "react-native-web-webview": "^1.0.2", + "react-native-webview": "^13.6.3", + "react-native-youtube-iframe": "^2.3.0", "react-responsive": "^9.0.2", "rn-fetch-blob": "^0.12.0", "sentry-expo": "~7.0.1", @@ -175,10 +183,13 @@ "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@did-plc/server": "^0.0.1", + "@expo/config-plugins": "7.8.0", + "@expo/prebuild-config": "6.7.0", "@lingui/cli": "^4.5.0", "@lingui/macro": "^4.5.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@react-native-community/eslint-config": "^3.0.0", + "@react-native/typescript-config": "^0.74.0", "@testing-library/jest-native": "^5.4.1", "@testing-library/react-native": "^11.5.2", "@tsconfig/react-native": "^2.0.3", @@ -199,11 +210,12 @@ "@types/react-test-renderer": "^17.0.1", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", - "babel-jest": "^29.4.2", + "babel-jest": "^29.7.0", "babel-loader": "^9.1.2", "babel-plugin-macros": "^3.1.0", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-react-native-web": "^0.18.12", + "babel-preset-expo": "^10.0.0", "detox": "^20.13.0", "eslint": "^8.19.0", "eslint-plugin-detox": "^1.0.0", @@ -214,8 +226,8 @@ "html-webpack-plugin": "^5.5.0", "husky": "^8.0.3", "is-ci": "^3.0.1", - "jest": "^29.4.3", - "jest-expo": "^49.0.0", + "jest": "^29.7.0", + "jest-expo": "^50.0.1", "jest-junit": "^15.0.0", "lint-staged": "^13.2.3", "metro-react-native-babel-preset": "^0.73.7", @@ -225,7 +237,7 @@ "react-scripts": "^5.0.1", "react-test-renderer": "18.2.0", "ts-node": "^10.9.1", - "typescript": "^5.1.3", + "typescript": "^5.3.3", "url-loader": "^4.1.1", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", diff --git a/patches/@sentry+react-native+5.10.0.patch b/patches/@sentry+react-native+5.5.0.patch similarity index 100% rename from patches/@sentry+react-native+5.10.0.patch rename to patches/@sentry+react-native+5.5.0.patch diff --git a/patches/babel-preset-expo+9.5.2.patch b/patches/babel-preset-expo+9.5.2.patch deleted file mode 100644 index 5e328c2243..0000000000 --- a/patches/babel-preset-expo+9.5.2.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/node_modules/babel-preset-expo/index.js b/node_modules/babel-preset-expo/index.js -index 2099ee3..2b9e092 100644 ---- a/node_modules/babel-preset-expo/index.js -+++ b/node_modules/babel-preset-expo/index.js -@@ -105,7 +105,8 @@ module.exports = function (api, options = {}) { - ], - ], - plugins: [ -- getObjectRestSpreadPlugin(), -+ // - dan: This will be disabled anyway when we upgrade Expo, but let's do it now. -+ // getObjectRestSpreadPlugin(), - ...extraPlugins, - getAliasPlugin(), - [require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }], diff --git a/patches/metro+0.76.8.patch b/patches/metro+0.80.1.patch similarity index 100% rename from patches/metro+0.76.8.patch rename to patches/metro+0.80.1.patch diff --git a/patches/metro-runtime+0.76.8.patch b/patches/metro-runtime+0.80.1.patch similarity index 100% rename from patches/metro-runtime+0.76.8.patch rename to patches/metro-runtime+0.80.1.patch diff --git a/patches/metro-transform-worker+0.76.8.patch b/patches/metro-transform-worker+0.80.1.patch similarity index 90% rename from patches/metro-transform-worker+0.76.8.patch rename to patches/metro-transform-worker+0.80.1.patch index d835eee06b..65f44e5783 100644 --- a/patches/metro-transform-worker+0.76.8.patch +++ b/patches/metro-transform-worker+0.80.1.patch @@ -1,8 +1,8 @@ diff --git a/node_modules/metro-transform-worker/src/index.js b/node_modules/metro-transform-worker/src/index.js -index 27d4cb3..fd71f47 100644 +index cae11e7..42f251b 100644 --- a/node_modules/metro-transform-worker/src/index.js +++ b/node_modules/metro-transform-worker/src/index.js -@@ -190,6 +190,10 @@ async function transformJS(file, { config, options, projectRoot }) { +@@ -189,6 +189,10 @@ async function transformJS(file, { config, options, projectRoot }) { let dependencyMapName = ""; let dependencies; let wrappedAst; @@ -13,7 +13,7 @@ index 27d4cb3..fd71f47 100644 // If the module to transform is a script (meaning that is not part of the // dependency graph and it code will just be prepended to the bundle modules), -@@ -229,19 +233,20 @@ async function transformJS(file, { config, options, projectRoot }) { +@@ -228,19 +232,20 @@ async function transformJS(file, { config, options, projectRoot }) { if (config.unstable_disableModuleWrapping === true) { wrappedAst = ast; } else { diff --git a/patches/react-native+0.72.5.patch b/patches/react-native+0.73.1.patch similarity index 81% rename from patches/react-native+0.72.5.patch rename to patches/react-native+0.73.1.patch index d640f6c9ee..66f7f76476 100644 --- a/patches/react-native+0.72.5.patch +++ b/patches/react-native+0.73.1.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m +diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm index 9dca6a5..090bda5 100644 ---- a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m -+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m +--- a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm ++++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm @@ -266,11 +266,10 @@ static void *TextFieldSelectionObservingContext = &TextFieldSelectionObservingCo - (void)textViewDidChangeSelection:(__unused UITextView *)textView diff --git a/patches/react-native-pager-view+6.1.4.patch b/patches/react-native-pager-view+6.1.4.patch deleted file mode 100644 index d6b4178ab3..0000000000 --- a/patches/react-native-pager-view+6.1.4.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/node_modules/react-native-pager-view/ios/ReactNativePageView.m b/node_modules/react-native-pager-view/ios/ReactNativePageView.m -index ab0fc7f..1ace752 100644 ---- a/node_modules/react-native-pager-view/ios/ReactNativePageView.m -+++ b/node_modules/react-native-pager-view/ios/ReactNativePageView.m -@@ -1,6 +1,6 @@ - - #import "ReactNativePageView.h" --#import "React/RCTLog.h" -+#import - #import - - #import "UIViewController+CreateExtension.h" -@@ -9,7 +9,7 @@ - #import "RCTOnPageSelected.h" - #import - --@interface ReactNativePageView () -+@interface ReactNativePageView () - - @property(nonatomic, strong) UIPageViewController *reactPageViewController; - @property(nonatomic, strong) RCTEventDispatcher *eventDispatcher; -@@ -80,6 +80,10 @@ - (void)didMoveToWindow { - [self setupInitialController]; - } - -+ UIPanGestureRecognizer* panGestureRecognizer = [UIPanGestureRecognizer new]; -+ panGestureRecognizer.delegate = self; -+ [self addGestureRecognizer: panGestureRecognizer]; -+ - if (self.reactViewController.navigationController != nil && self.reactViewController.navigationController.interactivePopGestureRecognizer != nil) { - [self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.reactViewController.navigationController.interactivePopGestureRecognizer]; - } -@@ -463,4 +467,21 @@ - (NSString *)determineScrollDirection:(UIScrollView *)scrollView { - - (BOOL)isLtrLayout { - return [_layoutDirection isEqualToString:@"ltr"]; - } -+ -+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { -+ if (!_overdrag && otherGestureRecognizer == self.scrollView.panGestureRecognizer) { -+ UIPanGestureRecognizer* p = (UIPanGestureRecognizer*) gestureRecognizer; -+ CGPoint velocity = [p velocityInView:self]; -+ if (self.currentIndex == 0 && velocity.x > 0) { -+ self.scrollView.panGestureRecognizer.enabled = false; -+ return NO; -+ } else { -+ self.scrollView.panGestureRecognizer.enabled = self.scrollEnabled; -+ } -+ } else { -+ self.scrollView.panGestureRecognizer.enabled = self.scrollEnabled; -+ } -+ -+ return YES; -+} - @end diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 0a46041fb7..940c3526c0 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -26,7 +26,7 @@ import {BottomBar} from './view/shell/bottom-bar/BottomBar' import {buildStateObject} from 'lib/routes/helpers' import {State, RouteParams} from 'lib/routes/types' import {colors} from 'lib/styles' -import {isNative} from 'platform/detection' +import {isAndroid, isNative} from 'platform/detection' import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle' import {router} from './routes' import {usePalette} from 'lib/hooks/usePalette' @@ -286,6 +286,7 @@ function HomeTabNavigator() { return ( {}) - const AnimatedLogo = Animated.createAnimatedComponent(Logo) export function Splash(props: React.PropsWithChildren) { @@ -49,6 +47,7 @@ export function Splash(props: React.PropsWithChildren) { const intro = useSharedValue(0) const outroLogo = useSharedValue(0) const outroApp = useSharedValue(0) + const outroAppOpacity = useSharedValue(0) const [isAnimationComplete, setIsAnimationComplete] = React.useState(false) const [isImageLoaded, setIsImageLoaded] = React.useState(false) const isReady = props.isReady && isImageLoaded @@ -62,8 +61,8 @@ export function Splash(props: React.PropsWithChildren) { { scale: interpolate( outroLogo.value, - [0, 0.06, 0.08, 1], - [1, 0.8, 0.8, 400], + [0, 0.08, 1], + [1, 0.8, 400], 'clamp', ), }, @@ -79,7 +78,12 @@ export function Splash(props: React.PropsWithChildren) { scale: interpolate(outroApp.value, [0, 1], [1.1, 1], 'clamp'), }, ], - opacity: interpolate(outroApp.value, [0, 0.9, 1], [0, 1, 1], 'clamp'), + opacity: interpolate( + outroAppOpacity.value, + [0, 0.08, 0.15, 1], + [0, 0, 1, 1], + 'clamp', + ), } }) @@ -92,29 +96,30 @@ export function Splash(props: React.PropsWithChildren) { intro.value = withTiming( 1, - {duration: 200, easing: Easing.out(Easing.cubic)}, + {duration: 400, easing: Easing.out(Easing.cubic)}, async () => { // set these values to check animation at specific point // outroLogo.value = 0.1 // outroApp.value = 0.1 outroLogo.value = withTiming( 1, - {duration: 1000, easing: Easing.in(Easing.cubic)}, - () => { - runOnJS(onFinish)() - }, - ) - outroApp.value = withTiming( - 1, - {duration: 1000, easing: Easing.inOut(Easing.cubic)}, + {duration: 1200, easing: Easing.in(Easing.cubic)}, () => { runOnJS(onFinish)() }, ) + outroApp.value = withTiming(1, { + duration: 1200, + easing: Easing.inOut(Easing.cubic), + }) + outroAppOpacity.value = withTiming(1, { + duration: 1200, + easing: Easing.in(Easing.cubic), + }) }, ) } - }, [onFinish, intro, outroLogo, outroApp, isReady]) + }, [onFinish, intro, outroLogo, outroApp, outroAppOpacity, isReady]) const onLoadEnd = useCallback(() => { setIsImageLoaded(true) diff --git a/src/alf/util/useColorModeTheme.ts b/src/alf/util/useColorModeTheme.ts index 4d56332b38..79cebc1394 100644 --- a/src/alf/util/useColorModeTheme.ts +++ b/src/alf/util/useColorModeTheme.ts @@ -1,9 +1,10 @@ +import {useColorScheme} from 'react-native' + import * as persisted from '#/state/persisted' -import {useColorScheme_FIXED} from '#/lib/hooks/useColorScheme_FIXED' export function useColorModeTheme( theme: persisted.Schema['colorMode'], ): 'light' | 'dark' { - const colorScheme = useColorScheme_FIXED() + const colorScheme = useColorScheme() return (theme === 'system' ? colorScheme : theme) || 'light' } diff --git a/src/lib/ThemeContext.tsx b/src/lib/ThemeContext.tsx index a728a797a9..38bd199cbd 100644 --- a/src/lib/ThemeContext.tsx +++ b/src/lib/ThemeContext.tsx @@ -1,7 +1,11 @@ import React, {ReactNode, createContext, useContext} from 'react' -import {TextStyle, ViewStyle, ColorSchemeName} from 'react-native' +import { + TextStyle, + useColorScheme, + ViewStyle, + ColorSchemeName, +} from 'react-native' import {darkTheme, defaultTheme} from './themes' -import {useColorScheme_FIXED} from '#/lib/hooks/useColorScheme_FIXED' export type ColorScheme = 'light' | 'dark' @@ -95,7 +99,7 @@ export const ThemeProvider: React.FC = ({ theme, children, }) => { - const colorScheme = useColorScheme_FIXED() + const colorScheme = useColorScheme() const themeValue = getTheme(theme === 'system' ? colorScheme : theme) return ( diff --git a/src/lib/analytics/types.ts b/src/lib/analytics/types.ts index 3d2ebb312e..5a24c360af 100644 --- a/src/lib/analytics/types.ts +++ b/src/lib/analytics/types.ts @@ -13,7 +13,6 @@ interface TrackPropertiesMap { 'Sign In': {resumedSession: boolean} // CAN BE SERVER 'Create Account': {} // CAN BE SERVER 'Try Create Account': {} - 'Create Account Successfully': {} 'Signin:PressedForgotPassword': {} 'Signin:PressedSelectService': {} // COMPOSER / CREATE POST events diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 9a050fd3e5..c964693c45 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 = new Set() seenUris: Set = 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/useColorScheme_FIXED.ts b/src/lib/hooks/useColorScheme_FIXED.ts deleted file mode 100644 index 46b24979c5..0000000000 --- a/src/lib/hooks/useColorScheme_FIXED.ts +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' -import { - AppState, - useColorScheme as useColorScheme_BUGGY, - ColorSchemeName, -} from 'react-native' - -import {isWeb} from '#/platform/detection' - -/** - * 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 - */ -export function useColorScheme_FIXED() { - const colorScheme = useColorScheme_BUGGY() - const [currentColorScheme, setCurrentColorScheme] = - React.useState(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 -} diff --git a/src/lib/hooks/usePermissions.web.ts b/src/lib/hooks/usePermissions.web.ts new file mode 100644 index 0000000000..c550a7d6df --- /dev/null +++ b/src/lib/hooks/usePermissions.web.ts @@ -0,0 +1,16 @@ +export function usePhotoLibraryPermission() { + const requestPhotoAccessIfNeeded = async () => { + // On the, we use 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 0000000000..2195b23044 --- /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[1] & { + hiddenPosts?: string[] +} + +export function moderatePost_wrapped( + subject: Parameters[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 8ba99128bc..bf19c208ad 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 0000000000..ec996dfa53 --- /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 e9bf4111d3..8a71718c8d 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 d4bc6c3386..d4028c643b 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 3039e587d0..ef09e5e684 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -114,6 +114,14 @@ 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 + // DISABLED until this translation is more thoroughly reviewed -prf + // case 'es': + // return AppLanguage.es default: continue } diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts index 174d56be5f..164fce9fc7 100644 --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -5,6 +5,12 @@ import {useLanguagePrefs} from '#/state/preferences' import {messages as messagesEn} from '#/locale/locales/en/messages' import {messages as messagesHi} from '#/locale/locales/hi/messages' import {messages as messagesJa} from '#/locale/locales/ja/messages' +import {messages as messagesFr} from '#/locale/locales/fr/messages' +// DISABLED until this translation is fixed -prf +// import {messages as messagesDe} from '#/locale/locales/de/messages' +// DISABLED until this translation is more thoroughly reviewed -prf +// import {messages as messagesEs} from '#/locale/locales/es/messages' + import {sanitizeAppLanguageSetting} from '#/locale/helpers' import {AppLanguage} from '#/locale/languages' @@ -21,6 +27,20 @@ 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 + // } + // DISABLED until this translation is more thoroughly reviewed -prf + // case AppLanguage.es: { + // i18n.loadAndActivate({locale, messages: messagesEs}) + // break + // } default: { i18n.loadAndActivate({locale, messages: messagesEn}) break diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts index 6edf23e054..bf6f6e1964 100644 --- a/src/locale/i18n.web.ts +++ b/src/locale/i18n.web.ts @@ -20,6 +20,20 @@ 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 + // } + // DISABLED until this translation is more thoroughly reviewed -prf + // case AppLanguage.es: { + // mod = await import(`./locales/es/messages`) + // break + // } default: { mod = await import(`./locales/en/messages`) break diff --git a/src/locale/languages.ts b/src/locale/languages.ts index 411b4a262a..d7559b5782 100644 --- a/src/locale/languages.ts +++ b/src/locale/languages.ts @@ -8,6 +8,11 @@ export enum AppLanguage { en = 'en', hi = 'hi', ja = 'ja', + fr = 'fr', + // DISABLED until this translation is fixed -prf + // de = 'de', + // DISABLED until this translation is more thoroughly reviewed -prf + // es = 'es', } interface AppLanguageConfig { @@ -19,6 +24,11 @@ export const APP_LANGUAGES: AppLanguageConfig[] = [ {code2: AppLanguage.en, name: 'English'}, {code2: AppLanguage.hi, name: 'हिंदी'}, {code2: AppLanguage.ja, name: '日本語'}, + {code2: AppLanguage.fr, name: 'Français'}, + // DISABLED until this translation is fixed -prf + // {code2: AppLanguage.de, name: 'Deutsch'}, + // DISABLED until this translation is more thoroughly reviewed -prf + // {code2: AppLanguage.es, name: 'Español'}, ] 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 0000000000..b2f65b2ae9 --- /dev/null +++ b/src/locale/locales/de/messages.po @@ -0,0 +1,2496 @@ +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:168 +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:151 +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<1>Recommended<2>Feeds" +msgstr "<0>Wählen Sie Ihre<1>Empfohlenes<2>Feeds" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "<0>Folgen Sie einigen<1>Empfohlenes<2>Feed" + +#: 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:763 +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:753 +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:271 +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:237 +#: 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:353 +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:250 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:672 +msgid "Back" +msgstr "Zurück" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Grundlagen" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +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:523 +msgid "Block accounts" +msgstr "Kontos sperren" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Block list" +msgstr " Liste sperren" + +#: src/view/screens/ProfileList.tsx:308 +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:310 +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:601 +#: 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/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + +#: 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:127 +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:74 +#: src/view/screens/Search/Search.tsx:582 +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:269 +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:385 +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:95 +msgid "Could not load feed" +msgstr "Feed konnte nicht geladen werden" + +#: src/view/screens/ProfileList.tsx:839 +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:121 +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:352 +#: src/view/screens/ProfileList.tsx:412 +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:400 +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:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "E-Mail" + +#: src/view/com/auth/create/Step2.tsx:99 +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:104 +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:556 +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:73 +#: 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:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 +msgid "Feeds" +msgstr "Feeds" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "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:427 +msgid "Find users on Bluesky" +msgstr "Benutzer auf Bluesky finden" + +#: src/view/screens/Search/Search.tsx:425 +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:232 +msgid "Forgot" +msgstr "Vergessen" + +#: src/view/com/auth/login/LoginForm.tsx:229 +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:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 +msgid "Go Back" +msgstr "Zurückgehen" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/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:102 +#: 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:324 +#: 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:316 +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:306 +#: 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:72 +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:86 +#: src/view/com/auth/create/Step2.tsx:90 +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:586 +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:379 +#: 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:148 +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:537 +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:397 +#: 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:361 +#: src/view/screens/ProfileList.tsx:584 +msgid "More options" +msgstr "Mehr Optionen" + +#: src/view/com/profile/ProfileHeader.tsx:370 +msgid "Mute Account" +msgstr "Stummes Konto" + +#: src/view/screens/ProfileList.tsx:511 +msgid "Mute accounts" +msgstr "Stummes Konto" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Mute list" +msgstr "Stumme Liste" + +#: src/view/screens/ProfileList.tsx:271 +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:273 +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:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "Neuer Posten " + +#: src/view/shell/desktop/LeftNav.tsx:258 +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:282 +#: 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:120 +#: 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:579 +#: src/view/screens/ProfileList.tsx:720 +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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "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:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "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:156 +#: 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/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + +#: 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:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 +#: 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:84 +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:415 +#: 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:271 +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:291 +msgid "Report feed" +msgstr "Bericht Feed" + +#: src/view/screens/ProfileList.tsx:426 +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:68 +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:259 +#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "Wiederholung" + +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: 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:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "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:433 +#: 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:385 +msgid "Share" +msgstr "Teilen" + +#: src/view/screens/ProfileFeed.tsx:303 +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:345 +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:575 +msgid "Subscribe" +msgstr "Abonnieren" + +#: src/view/screens/ProfileList.tsx:571 +msgid "Subscribe to this list" +msgstr "Abonnieren Sie diese Liste" + +#: src/view/screens/Search/Search.tsx:362 +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:93 +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:51 +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:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: 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:473 +msgid "Un-block list" +msgstr "Liste freigeben" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Un-mute list" +msgstr "Stummschaltliste aufheben" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +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:441 +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:188 +msgid "Username or email address" +msgstr "Benutzername oder E-Mail Adresse" + +#: src/view/screens/ProfileList.tsx:747 +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:122 +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:243 +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" +msgstr "Willkommen bei <0>Bluesky" + +#: 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:120 +#: 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:58 +msgid "Your account" +msgstr "Ihr Konto" + +#: src/view/com/auth/create/Step2.tsx:146 +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:137 +#: 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 7b0c651680..d1982e580a 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -21,7 +21,7 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "" -#: src/view/shell/desktop/RightNav.tsx:160 +#: src/view/shell/desktop/RightNav.tsx:168 msgid "{0, plural, one {# invite code available} other {# invite codes available}}" msgstr "" @@ -33,21 +33,21 @@ msgstr "" msgid "{0} {purposeLabel} List" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:143 +#: src/view/shell/desktop/RightNav.tsx:151 msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" 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 "" @@ -75,6 +75,10 @@ msgstr "" #~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" +#: 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 "" @@ -95,7 +99,7 @@ msgstr "" #: src/view/com/modals/ListAddRemoveUsers.tsx:264 #: src/view/com/modals/UserAddRemoveLists.tsx:193 -#: src/view/screens/ProfileList.tsx:754 +#: src/view/screens/ProfileList.tsx:763 msgid "Add" msgstr "" @@ -103,7 +107,7 @@ msgstr "" msgid "Add a content warning" msgstr "" -#: src/view/screens/ProfileList.tsx:744 +#: src/view/screens/ProfileList.tsx:753 msgid "Add a user to this list" msgstr "" @@ -126,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 "" @@ -142,7 +146,7 @@ msgstr "" msgid "Add to Lists" msgstr "" -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Add to my feeds" msgstr "" @@ -183,7 +187,7 @@ msgstr "" msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." msgstr "" -#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/notifications/FeedItem.tsx:237 #: src/view/com/threadgate/WhoCanReply.tsx:178 msgid "and" msgstr "" @@ -200,15 +204,23 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/com/modals/AppealLabel.tsx:65 -msgid "Appeal Decision" +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 +msgid "Appeal content warning" msgstr "" -#: src/view/com/util/moderation/LabelInfo.tsx:51 +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 msgid "Appeal this decision" msgstr "" -#: src/view/com/util/moderation/LabelInfo.tsx:55 +#: src/view/com/util/moderation/LabelInfo.tsx:56 msgid "Appeal this decision." msgstr "" @@ -228,11 +240,11 @@ msgstr "" msgid "Are you sure you'd like to discard this draft?" msgstr "" -#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:353 msgid "Are you sure?" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:188 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "" @@ -244,15 +256,15 @@ msgstr "" #~ msgid "Ask apps to limit the visibility of my account" #~ msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:145 +#: 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/LoginForm.tsx:250 #: 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/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 #: src/view/com/profile/ProfileHeader.tsx:672 msgid "Back" msgstr "" @@ -261,8 +273,8 @@ msgstr "" msgid "Basics" msgstr "" -#: src/view/com/auth/create/Step2.tsx:131 -#: src/view/com/modals/BirthDateSettings.tsx:72 +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 msgid "Birthday" msgstr "" @@ -275,15 +287,15 @@ msgstr "" msgid "Block Account" msgstr "" -#: src/view/screens/ProfileList.tsx:522 +#: src/view/screens/ProfileList.tsx:523 msgid "Block accounts" msgstr "" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Block list" msgstr "" -#: src/view/screens/ProfileList.tsx:307 +#: src/view/screens/ProfileList.tsx:308 msgid "Block these accounts?" msgstr "" @@ -291,7 +303,7 @@ msgstr "" msgid "Blocked accounts" msgstr "" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "" @@ -299,15 +311,15 @@ 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 "" -#: src/view/screens/ProfileList.tsx:309 +#: src/view/screens/ProfileList.tsx:310 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "" @@ -361,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 @@ -376,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:601 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "" @@ -386,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 "" @@ -448,6 +460,10 @@ msgstr "" msgid "Check your inbox for an email with the confirmation code to enter below:" msgstr "" +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + #: src/view/com/modals/ServerInput.tsx:38 msgid "Choose Service" msgstr "" @@ -460,7 +476,7 @@ msgstr "" #~ msgid "Choose your" #~ msgstr "" -#: src/view/com/auth/create/Step2.tsx:106 +#: src/view/com/auth/create/Step2.tsx:127 msgid "Choose your password" msgstr "" @@ -480,8 +496,8 @@ msgstr "" 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/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 msgid "Clear search query" msgstr "" @@ -541,8 +557,8 @@ msgstr "" msgid "Confirmation code" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:178 -#: src/view/com/auth/login/LoginForm.tsx:268 +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:269 msgid "Connecting..." msgstr "" @@ -581,11 +597,11 @@ msgstr "" msgid "Copy" msgstr "" -#: src/view/screens/ProfileList.tsx:384 +#: src/view/screens/ProfileList.tsx:385 msgid "Copy link to list" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "" @@ -593,7 +609,7 @@ msgstr "" msgid "Copy link to profile" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:115 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "" @@ -601,11 +617,11 @@ msgstr "" msgid "Copyright Policy" msgstr "" -#: src/view/screens/ProfileFeed.tsx:94 +#: src/view/screens/ProfileFeed.tsx:95 msgid "Could not load feed" msgstr "" -#: src/view/screens/ProfileList.tsx:830 +#: src/view/screens/ProfileList.tsx:839 msgid "Could not load list" msgstr "" @@ -614,7 +630,7 @@ msgstr "" msgid "Create a new account" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:124 +#: src/view/com/auth/create/CreateAccount.tsx:121 msgid "Create Account" msgstr "" @@ -653,8 +669,8 @@ msgstr "" msgid "Delete app password" msgstr "" -#: src/view/screens/ProfileList.tsx:351 -#: src/view/screens/ProfileList.tsx:411 +#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:412 msgid "Delete List" msgstr "" @@ -666,15 +682,15 @@ msgstr "" msgid "Delete my account…" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:183 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:187 +#: 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 "" @@ -693,6 +709,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 "" @@ -749,7 +769,7 @@ msgstr "" msgid "Edit image" msgstr "" -#: src/view/screens/ProfileList.tsx:399 +#: src/view/screens/ProfileList.tsx:400 msgid "Edit list details" msgstr "" @@ -774,14 +794,14 @@ msgstr "" msgid "Edit Saved Feeds" msgstr "" -#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/create/Step2.tsx:108 #: src/view/com/auth/login/ForgotPasswordForm.tsx:148 #: src/view/com/modals/ChangeEmail.tsx:141 #: src/view/com/modals/Waitlist.tsx:88 msgid "Email" msgstr "" -#: src/view/com/auth/create/Step2.tsx:81 +#: src/view/com/auth/create/Step2.tsx:99 msgid "Email address" msgstr "" @@ -797,7 +817,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 "" @@ -813,7 +833,7 @@ msgstr "" msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." msgstr "" -#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:104 msgid "Enter your email address" msgstr "" @@ -825,7 +845,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 "" @@ -842,7 +862,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:556 msgid "Feed offline" msgstr "" @@ -850,17 +870,17 @@ msgstr "" msgid "Feed Preferences" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx: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:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "" @@ -872,11 +892,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:427 msgid "Find users on Bluesky" msgstr "" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:425 msgid "Find users with the search tool on the right" msgstr "" @@ -937,11 +957,11 @@ msgstr "" msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:231 +#: src/view/com/auth/login/LoginForm.tsx:232 msgid "Forgot" msgstr "" -#: src/view/com/auth/login/LoginForm.tsx:228 +#: src/view/com/auth/login/LoginForm.tsx:229 msgid "Forgot password" msgstr "" @@ -958,22 +978,22 @@ msgstr "" msgid "Get Started" msgstr "" -#: src/view/com/auth/LoggedOut.tsx:70 -#: src/view/com/auth/LoggedOut.tsx:71 +#: 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 "" -#: src/view/screens/ProfileFeed.tsx:103 -#: src/view/screens/ProfileFeed.tsx:108 -#: src/view/screens/ProfileList.tsx:839 -#: src/view/screens/ProfileList.tsx:844 +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 msgid "Go Back" msgstr "" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/LoginForm.tsx:279 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "" @@ -982,8 +1002,8 @@ msgstr "" msgid "Handle" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "" @@ -991,12 +1011,20 @@ msgstr "" msgid "Here is your app password." msgstr "" -#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/notifications/FeedItem.tsx:324 #: src/view/com/util/moderation/ContentHider.tsx:103 msgid "Hide" msgstr "" -#: src/view/com/notifications/FeedItem.tsx:308 +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" msgstr "" @@ -1029,9 +1057,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:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "" @@ -1062,7 +1090,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 "" @@ -1089,7 +1117,7 @@ msgstr "" msgid "Invite a Friend" msgstr "" -#: src/view/com/auth/create/Step2.tsx:57 +#: src/view/com/auth/create/Step2.tsx:72 msgid "Invite code" msgstr "" @@ -1097,7 +1125,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 "" @@ -1109,8 +1137,8 @@ msgstr "" msgid "Join the waitlist" msgstr "" -#: src/view/com/auth/create/Step2.tsx:68 -#: src/view/com/auth/create/Step2.tsx:72 +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 msgid "Join the waitlist." msgstr "" @@ -1174,7 +1202,7 @@ msgstr "" #~ msgid "Light" #~ msgstr "" -#: src/view/screens/ProfileFeed.tsx:577 +#: src/view/screens/ProfileFeed.tsx:586 msgid "Like this feed" msgstr "" @@ -1183,7 +1211,7 @@ msgstr "" msgid "Liked by" msgstr "" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "" @@ -1203,19 +1231,19 @@ 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:379 +#: 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 "" -#: src/view/screens/Notifications.tsx:144 +#: src/view/screens/Notifications.tsx:148 msgid "Load new notifications" msgstr "" @@ -1251,7 +1279,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 "" @@ -1273,9 +1301,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:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "" @@ -1292,8 +1320,8 @@ msgid "More feeds" msgstr "" #: src/view/com/profile/ProfileHeader.tsx:548 -#: src/view/screens/ProfileFeed.tsx:360 -#: src/view/screens/ProfileList.tsx:583 +#: src/view/screens/ProfileFeed.tsx:361 +#: src/view/screens/ProfileList.tsx:584 msgid "More options" msgstr "" @@ -1305,19 +1333,19 @@ msgstr "" msgid "Mute Account" msgstr "" -#: src/view/screens/ProfileList.tsx:510 +#: src/view/screens/ProfileList.tsx:511 msgid "Mute accounts" msgstr "" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Mute list" msgstr "" -#: src/view/screens/ProfileList.tsx:270 +#: src/view/screens/ProfileList.tsx:271 msgid "Mute these accounts?" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" msgstr "" @@ -1325,15 +1353,15 @@ 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 "" -#: src/view/screens/ProfileList.tsx:272 +#: src/view/screens/ProfileList.tsx:273 msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." msgstr "" @@ -1349,7 +1377,7 @@ msgstr "" msgid "My Feeds" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "" @@ -1372,23 +1400,23 @@ 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/ProfileFeed.tsx:430 -#: src/view/screens/ProfileList.tsx:193 -#: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 msgid "New post" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:258 msgid "New Post" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:158 +#: 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/LoginForm.tsx:282 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1399,14 +1427,15 @@ msgstr "" msgid "Next image" msgstr "" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:191 #: src/view/screens/PreferencesHomeFeed.tsx:226 #: src/view/screens/PreferencesHomeFeed.tsx:263 msgid "No" msgstr "" -#: src/view/screens/ProfileFeed.tsx:570 -#: src/view/screens/ProfileList.tsx:711 +#: src/view/screens/ProfileFeed.tsx:579 +#: src/view/screens/ProfileList.tsx:720 msgid "No description" msgstr "" @@ -1424,9 +1453,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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "" @@ -1455,12 +1484,12 @@ msgstr "" #~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" -#: src/view/screens/Notifications.tsx:109 -#: src/view/screens/Notifications.tsx:133 +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "" @@ -1472,7 +1501,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 "" @@ -1488,8 +1517,8 @@ msgstr "" msgid "Opens configurable language settings" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "" @@ -1525,6 +1554,10 @@ msgstr "" msgid "Opens the threads preferences" msgstr "" +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + #: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "" @@ -1542,9 +1575,9 @@ msgstr "" msgid "Page not found" msgstr "" -#: 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/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1592,16 +1625,25 @@ 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." +msgid "Please tell us why you think this content warning was incorrectly applied!" msgstr "" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "" + +#: src/view/com/composer/Composer.tsx: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 "" @@ -1613,11 +1655,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 "" @@ -1637,11 +1679,13 @@ msgstr "" msgid "Prioritize Your Follows" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:76 +#: src/view/shell/desktop/RightNav.tsx:84 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 "" @@ -1650,14 +1694,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:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "" @@ -1717,7 +1761,7 @@ msgstr "" #: src/view/com/feeds/FeedSourceCard.tsx:105 #: src/view/com/feeds/FeedSourceCard.tsx:172 -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Remove from my feeds" msgstr "" @@ -1742,7 +1786,7 @@ msgstr "" msgid "Removed from list" msgstr "" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "" @@ -1762,16 +1806,16 @@ msgstr "" msgid "Report Account" msgstr "" -#: src/view/screens/ProfileFeed.tsx:290 +#: src/view/screens/ProfileFeed.tsx:291 msgid "Report feed" msgstr "" -#: src/view/screens/ProfileList.tsx:425 +#: src/view/screens/ProfileList.tsx:426 msgid "Report List" msgstr "" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:165 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "" @@ -1801,7 +1845,7 @@ msgstr "" #~ msgid "Require alt text before posting" #~ msgstr "" -#: src/view/com/auth/create/Step2.tsx:53 +#: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "" @@ -1829,10 +1873,10 @@ msgstr "" msgid "Resets the preferences state" msgstr "" +#: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/create/CreateAccount.tsx:171 -#: src/view/com/auth/login/LoginForm.tsx:258 -#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/auth/login/LoginForm.tsx:259 +#: src/view/com/auth/login/LoginForm.tsx:262 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" @@ -1842,9 +1886,9 @@ msgstr "" #~ msgid "Retry change handle" #~ msgstr "" -#: src/view/com/modals/AltImage.tsx:114 -#: src/view/com/modals/BirthDateSettings.tsx:93 -#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 #: src/view/com/modals/CreateOrEditList.tsx:249 #: src/view/com/modals/CreateOrEditList.tsx:257 @@ -1852,7 +1896,7 @@ msgstr "" msgid "Save" msgstr "" -#: src/view/com/modals/AltImage.tsx:105 +#: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" msgstr "" @@ -1877,15 +1921,15 @@ msgid "Saved Feeds" 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/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:324 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "" @@ -1893,6 +1937,11 @@ msgstr "" #~ msgid "Search for posts and users." #~ msgstr "" +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +msgid "Search for users" +msgstr "" + #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" msgstr "" @@ -1937,8 +1986,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 "" @@ -1971,9 +2020,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:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "" @@ -1982,12 +2031,12 @@ msgid "Sexual activity or erotic nudity." msgstr "" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 -#: src/view/screens/ProfileList.tsx:384 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:385 msgid "Share" msgstr "" -#: src/view/screens/ProfileFeed.tsx:302 +#: src/view/screens/ProfileFeed.tsx:303 msgid "Share feed" msgstr "" @@ -2024,7 +2073,7 @@ msgstr "" msgid "Show Reposts" msgstr "" -#: src/view/com/notifications/FeedItem.tsx:337 +#: src/view/com/notifications/FeedItem.tsx:345 msgid "Show users" msgstr "" @@ -2123,15 +2172,15 @@ msgstr "" msgid "Submit" msgstr "Submit" -#: src/view/screens/ProfileList.tsx:574 +#: src/view/screens/ProfileList.tsx:575 msgid "Subscribe" msgstr "" -#: src/view/screens/ProfileList.tsx:570 +#: src/view/screens/ProfileList.tsx:571 msgid "Subscribe to this list" msgstr "" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:362 msgid "Suggested Follows" msgstr "" @@ -2156,16 +2205,18 @@ msgstr "" msgid "Tall" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:85 +#: src/view/shell/desktop/RightNav.tsx:93 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 "" #: src/view/com/modals/AppealLabel.tsx:70 -#: src/view/com/modals/report/InputIssueDetails.tsx:50 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 msgid "Text input field" msgstr "" @@ -2181,7 +2232,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 "" @@ -2202,8 +2253,8 @@ msgid "There was an unexpected issue in the application. Please let us know if t msgstr "" #: src/view/com/util/moderation/LabelInfo.tsx:45 -msgid "This {0} has been labeled." -msgstr "" +#~ msgid "This {0} has been labeled." +#~ msgstr "" #: src/view/com/util/moderation/ScreenHider.tsx:88 msgid "This {screenDescription} has been flagged:" @@ -2237,7 +2288,7 @@ msgstr "" msgid "This link is taking you to the following website:" msgstr "" -#: src/view/com/post-thread/PostThreadItem.tsx:124 +#: src/view/com/post-thread/PostThreadItem.tsx:123 msgid "This post has been deleted." msgstr "" @@ -2245,6 +2296,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" @@ -2262,9 +2317,9 @@ msgstr "" msgid "Transformations" msgstr "" -#: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/post-thread/PostThreadItem.tsx:708 -#: src/view/com/util/forms/PostDropdownBtn.tsx:101 +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "" @@ -2272,15 +2327,15 @@ msgstr "" msgid "Try again" msgstr "" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Un-block list" msgstr "" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Un-mute list" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/create/CreateAccount.tsx:65 #: 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." @@ -2308,11 +2363,11 @@ msgstr "" msgid "Unmute Account" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "" -#: src/view/screens/ProfileList.tsx:440 +#: src/view/screens/ProfileList.tsx:441 msgid "Unpin moderation list" msgstr "" @@ -2357,11 +2412,11 @@ msgid "User Lists" msgstr "" #: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:187 +#: src/view/com/auth/login/LoginForm.tsx:188 msgid "Username or email address" msgstr "" -#: src/view/screens/ProfileList.tsx:738 +#: src/view/screens/ProfileList.tsx:747 msgid "Users" msgstr "" @@ -2377,15 +2432,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 "" @@ -2406,7 +2461,7 @@ msgstr "" msgid "Visit Site" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:125 +#: src/view/com/auth/create/CreateAccount.tsx:122 msgid "We're so excited to have you join us!" msgstr "" @@ -2418,7 +2473,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:243 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2459,7 +2514,7 @@ msgstr "" msgid "Wide" msgstr "" -#: src/view/com/composer/Composer.tsx:409 +#: src/view/com/composer/Composer.tsx:413 msgid "Write post" msgstr "" @@ -2467,6 +2522,7 @@ msgstr "" msgid "Write your reply" msgstr "" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:192 #: src/view/screens/PreferencesHomeFeed.tsx:227 #: src/view/screens/PreferencesHomeFeed.tsx:262 @@ -2498,20 +2554,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 "" @@ -2519,7 +2575,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 "" @@ -2527,11 +2583,11 @@ msgstr "" msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." msgstr "" -#: src/view/com/auth/create/Step2.tsx:43 +#: src/view/com/auth/create/Step2.tsx:58 msgid "Your account" msgstr "" -#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:146 msgid "Your birth date" msgstr "" @@ -2561,8 +2617,8 @@ msgid "Your hosting provider" msgstr "" #: src/view/screens/Settings.tsx:402 -#: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po new file mode 100644 index 0000000000..d2fd294bfc --- /dev/null +++ b/src/locale/locales/es/messages.po @@ -0,0 +1,2496 @@ +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:168 +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:151 +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<1>Recommended<2>Feeds" +msgstr "<0>Elige tus<1>publicaciones<2>recomendadas" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "<0>Sigue a algunos<1>usuarios<2>recomendados" + +#: 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:763 +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:753 +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:271 +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:237 +#: 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:353 +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:250 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:672 +msgid "Back" +msgstr "Regresar" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Conceptos básicos" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +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:523 +msgid "Block accounts" +msgstr "Bloquear cuentas" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Block list" +msgstr "Bloquear una lista" + +#: src/view/screens/ProfileList.tsx:308 +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:310 +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:601 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "Cancelar" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "Cancelar 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/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + +#: 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:127 +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:74 +#: src/view/screens/Search/Search.tsx:582 +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:269 +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:385 +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:95 +msgid "Could not load feed" +msgstr "No se ha podido cargar las publicaciones" + +#: src/view/screens/ProfileList.tsx:839 +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:121 +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:352 +#: src/view/screens/ProfileList.tsx:412 +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:400 +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:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "Correo electrónico" + +#: src/view/com/auth/create/Step2.tsx:99 +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:104 +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:556 +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:73 +#: 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:342 +#: 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:427 +msgid "Find users on Bluesky" +msgstr "Encontrar usuarios en Bluesky" + +#: src/view/screens/Search/Search.tsx:425 +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:232 +msgid "Forgot" +msgstr "Lo olvidé" + +#: src/view/com/auth/login/LoginForm.tsx:229 +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:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 +msgid "Go Back" +msgstr "Regresar" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/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:102 +#: 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:324 +#: src/view/com/util/moderation/ContentHider.tsx:103 +msgid "Hide" +msgstr "Ocultar" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide user list" +msgstr "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:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 +msgid "Home" +msgstr "Página inicial" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:96 +#: src/view/screens/PreferencesHomeFeed.tsx: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:72 +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:86 +#: src/view/com/auth/create/Step2.tsx:90 +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:586 +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:379 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 +msgid "Lists" +msgstr "Listas" + +#: src/view/com/post-thread/PostThread.tsx:259 +#: src/view/com/post-thread/PostThread.tsx:267 +msgid "Load more posts" +msgstr "Cargar más publicaciones" + +#: src/view/screens/Notifications.tsx:148 +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:537 +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:397 +#: 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:361 +#: src/view/screens/ProfileList.tsx:584 +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:511 +msgid "Mute accounts" +msgstr "Silenciar las cuentas" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Mute list" +msgstr "Silenciar la lista" + +#: src/view/screens/ProfileList.tsx:271 +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:273 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Silenciar 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:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "Publicación nueva" + +#: src/view/shell/desktop/LeftNav.tsx:258 +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:282 +#: 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:120 +#: 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:579 +#: src/view/screens/ProfileList.tsx:720 +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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "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:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "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:156 +#: 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/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + +#: 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:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 +#: 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:84 +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:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 +msgid "Profile" +msgstr "Perfil" + +#: src/view/screens/Settings.tsx: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:271 +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:291 +msgid "Report feed" +msgstr "Informe del canal de noticias" + +#: src/view/screens/ProfileList.tsx:426 +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:68 +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:259 +#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "Volver a intentar" + +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: 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:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "Buscar" + +#: src/view/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:433 +#: 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:385 +msgid "Share" +msgstr "Compartir" + +#: src/view/screens/ProfileFeed.tsx:303 +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:345 +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:575 +msgid "Subscribe" +msgstr "Suscribirse" + +#: src/view/screens/ProfileList.tsx:571 +msgid "Subscribe to this list" +msgstr "Suscribirse a esta lista" + +#: src/view/screens/Search/Search.tsx:362 +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:93 +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:51 +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:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: 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:473 +msgid "Un-block list" +msgstr "Desbloquear una lista" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Un-mute list" +msgstr "Desactivar la opción de silenciar la lista" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +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:441 +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:188 +msgid "Username or email address" +msgstr "Nombre de usuario o dirección de correo electrónico" + +#: src/view/screens/ProfileList.tsx:747 +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:122 +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:243 +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" +msgstr "Bienvenido a <0>Bluesky" + +#: 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:120 +#: 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:58 +msgid "Your account" +msgstr "Tu cuenta" + +#: src/view/com/auth/create/Step2.tsx:146 +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:137 +#: 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 0000000000..58d7f39111 --- /dev/null +++ b/src/locale/locales/fr/messages.po @@ -0,0 +1,2496 @@ +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:168 +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:151 +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<1>Recommended<2>Feeds" +msgstr "<0>Choisissez vos<1>fils d’actualité<2>recommandés" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "<0>Suivre certains<1>utilisateurs<2>recommandés" + +#: 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:763 +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:753 +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:271 +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:237 +#: 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:353 +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:250 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 +#: src/view/com/profile/ProfileHeader.tsx:672 +msgid "Back" +msgstr "Arrière" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "Principes de base" + +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 +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:523 +msgid "Block accounts" +msgstr "Bloquer ces comptes" + +#: src/view/screens/ProfileList.tsx:473 +msgid "Block list" +msgstr "Liste de blocage" + +#: src/view/screens/ProfileList.tsx:308 +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:310 +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:601 +#: 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/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + +#: 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:127 +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:74 +#: src/view/screens/Search/Search.tsx:582 +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:269 +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:385 +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:95 +msgid "Could not load feed" +msgstr "Impossible de charger le fil d’actu" + +#: src/view/screens/ProfileList.tsx:839 +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:121 +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:352 +#: src/view/screens/ProfileList.tsx:412 +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:400 +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:108 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "E-mail" + +#: src/view/com/auth/create/Step2.tsx:99 +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:104 +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:556 +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:73 +#: 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:342 +#: 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:427 +msgid "Find users on Bluesky" +msgstr "Trouver des utilisateurs sur Bluesky" + +#: src/view/screens/Search/Search.tsx:425 +msgid "Find users with the search tool on the right" +msgstr "Trouvez des utilisateurs à l’aide de l’outil de recherche, à droite." + +#: 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:232 +msgid "Forgot" +msgstr "Oublié" + +#: src/view/com/auth/login/LoginForm.tsx:229 +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:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 +msgid "Go Back" +msgstr "Retour" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:279 +#: src/view/com/auth/login/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:102 +#: 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:324 +#: 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:316 +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:306 +#: 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:72 +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:86 +#: src/view/com/auth/create/Step2.tsx:90 +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:586 +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:379 +#: 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:148 +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:537 +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:397 +#: 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:361 +#: src/view/screens/ProfileList.tsx:584 +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:511 +msgid "Mute accounts" +msgstr "Comptes en sourdine" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Mute list" +msgstr "Mettre en sourdine" + +#: src/view/screens/ProfileList.tsx:271 +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:273 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "Ce que vous mettez en sourdine reste privé. Les comptes en sourdine peuvent interagir avec vous, mais vous ne verrez pas leurs publications et ne recevrez pas de notifications de leur part." + +#: 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:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 +msgid "New post" +msgstr "Nouvelle publication" + +#: src/view/shell/desktop/LeftNav.tsx:258 +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:282 +#: 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:120 +#: 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:579 +#: src/view/screens/ProfileList.tsx:720 +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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "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:113 +#: src/view/screens/Notifications.tsx:137 +#: src/view/shell/bottom-bar/BottomBar.tsx:205 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 +msgid "Notifications" +msgstr "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:156 +#: 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/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + +#: 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:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 +#: 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:84 +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:415 +#: 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:271 +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:291 +msgid "Report feed" +msgstr "Signaler fil d’actu" + +#: src/view/screens/ProfileList.tsx:426 +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:68 +msgid "Required for this provider" +msgstr "Obligatoire pour ce fournisseur" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "Réinitialiser code" + +#: 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:259 +#: src/view/com/auth/login/LoginForm.tsx:262 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "Réessayer" + +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: 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:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 +#: src/view/shell/bottom-bar/BottomBar.tsx:159 +#: src/view/shell/desktop/LeftNav.tsx:324 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 +msgid "Search" +msgstr "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:433 +#: 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:385 +msgid "Share" +msgstr "Partager" + +#: src/view/screens/ProfileFeed.tsx:303 +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:345 +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:575 +msgid "Subscribe" +msgstr "S’abonner" + +#: src/view/screens/ProfileList.tsx:571 +msgid "Subscribe to this list" +msgstr "S’abonner à cette liste" + +#: src/view/screens/Search/Search.tsx:362 +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:93 +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:51 +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:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: 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:473 +msgid "Un-block list" +msgstr "Débloquer liste" + +#: src/view/screens/ProfileList.tsx:458 +msgid "Un-mute list" +msgstr "Désactiver sourdine sur cette liste" + +#: src/view/com/auth/create/CreateAccount.tsx:65 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +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:441 +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:188 +msgid "Username or email address" +msgstr "Nom d’utilisateur ou e-mail" + +#: src/view/screens/ProfileList.tsx:747 +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:122 +msgid "We're so excited to have you join us!" +msgstr "Nous sommes ravis de vous accueillir !" + +#: src/view/screens/Search/Search.tsx:243 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "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" +msgstr "Bienvenue sur <0>Bluesky" + +#: 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:120 +#: 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:58 +msgid "Your account" +msgstr "Votre compte" + +#: src/view/com/auth/create/Step2.tsx:146 +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:137 +#: 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 67eeb13b06..ab67ff125b 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -21,7 +21,7 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "यह चेतावनी केवल मीडिया वाले पोस्ट के लिए उपलब्ध है।" -#: src/view/shell/desktop/RightNav.tsx:160 +#: src/view/shell/desktop/RightNav.tsx:168 msgid "{0, plural, one {# invite code available} other {# invite codes available}}" msgstr "" @@ -33,21 +33,21 @@ msgstr "{0}" msgid "{0} {purposeLabel} List" msgstr "{0} {purposeLabel} सूची" -#: src/view/shell/desktop/RightNav.tsx:143 +#: src/view/shell/desktop/RightNav.tsx:151 msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" 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 "" @@ -75,6 +75,10 @@ msgstr "<0>कुछ<1>पसंदीदा उपयोगकर्ता #~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" +#: 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 "ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।" @@ -95,7 +99,7 @@ msgstr "अकाउंट के विकल्प" #: src/view/com/modals/ListAddRemoveUsers.tsx:264 #: src/view/com/modals/UserAddRemoveLists.tsx:193 -#: src/view/screens/ProfileList.tsx:754 +#: src/view/screens/ProfileList.tsx:763 msgid "Add" msgstr "ऐड करो" @@ -103,7 +107,7 @@ msgstr "ऐड करो" msgid "Add a content warning" msgstr "सामग्री चेतावनी जोड़ें" -#: src/view/screens/ProfileList.tsx:744 +#: src/view/screens/ProfileList.tsx:753 msgid "Add a user to this list" msgstr "इस सूची में किसी को जोड़ें" @@ -126,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 "लिंक कार्ड जोड़ें:" @@ -142,7 +146,7 @@ msgstr "अपने डोमेन में निम्नलिखित DN msgid "Add to Lists" msgstr "सूचियों में जोड़ें" -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Add to my feeds" msgstr "इस फ़ीड को सहेजें" @@ -183,7 +187,7 @@ msgstr "{0} को ईमेल भेजा गया है। इसमें msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." msgstr "{0} को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।" -#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/notifications/FeedItem.tsx:237 #: src/view/com/threadgate/WhoCanReply.tsx:178 msgid "and" msgstr "और" @@ -200,15 +204,23 @@ msgstr "ऐप पासवर्ड" msgid "App Passwords" msgstr "ऐप पासवर्ड" -#: src/view/com/modals/AppealLabel.tsx:65 -msgid "Appeal Decision" +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 +msgid "Appeal content warning" msgstr "" -#: src/view/com/util/moderation/LabelInfo.tsx:51 +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 msgid "Appeal this decision" msgstr "" -#: src/view/com/util/moderation/LabelInfo.tsx:55 +#: src/view/com/util/moderation/LabelInfo.tsx:56 msgid "Appeal this decision." msgstr "" @@ -228,11 +240,11 @@ msgstr "क्या आप वाकई ऐप पासवर्ड \"{name}\" msgid "Are you sure you'd like to discard this draft?" msgstr "क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?" -#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:353 msgid "Are you sure?" msgstr "क्या आप वास्तव में इसे करना चाहते हैं?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:188 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।" @@ -244,15 +256,15 @@ msgstr "कलात्मक या गैर-कामुक नग्नत #~ msgid "Ask apps to limit the visibility of my account" #~ msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:145 +#: 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/LoginForm.tsx:250 #: 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/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 #: src/view/com/profile/ProfileHeader.tsx:672 msgid "Back" msgstr "वापस" @@ -261,8 +273,8 @@ msgstr "वापस" msgid "Basics" msgstr "मूल बातें" -#: src/view/com/auth/create/Step2.tsx:131 -#: src/view/com/modals/BirthDateSettings.tsx:72 +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 msgid "Birthday" msgstr "जन्मदिन" @@ -275,15 +287,15 @@ msgstr "जन्मदिन:" msgid "Block Account" msgstr "खाता ब्लॉक करें" -#: src/view/screens/ProfileList.tsx:522 +#: src/view/screens/ProfileList.tsx:523 msgid "Block accounts" msgstr "खाता ब्लॉक करें" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Block list" msgstr "" -#: src/view/screens/ProfileList.tsx:307 +#: src/view/screens/ProfileList.tsx:308 msgid "Block these accounts?" msgstr "खाता ब्लॉक करें?" @@ -291,7 +303,7 @@ msgstr "खाता ब्लॉक करें?" msgid "Blocked accounts" msgstr "ब्लॉक किए गए खाते" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "ब्लॉक किए गए खाते" @@ -299,15 +311,15 @@ 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 "ब्लॉक पोस्ट।" -#: src/view/screens/ProfileList.tsx:309 +#: src/view/screens/ProfileList.tsx:310 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।" @@ -361,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 @@ -376,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:601 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "कैंसिल" @@ -386,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 "ऑल्ट टेक्स्ट मत जोड़ें" @@ -448,6 +460,10 @@ msgstr "कुछ अनुशंसित उपयोगकर्ताओं msgid "Check your inbox for an email with the confirmation code to enter below:" msgstr "नीचे प्रवेश करने के लिए OTP कोड के साथ एक ईमेल के लिए अपने इनबॉक्स की जाँच करें:" +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + #: src/view/com/modals/ServerInput.tsx:38 msgid "Choose Service" msgstr "सेवा चुनें" @@ -456,7 +472,7 @@ msgstr "सेवा चुनें" msgid "Choose the algorithms that power your experience with custom feeds." msgstr "उन एल्गोरिदम का चयन करें जो कस्टम फीड्स के साथ अपने अनुभव को शक्ति देते हैं।।" -#: src/view/com/auth/create/Step2.tsx:106 +#: src/view/com/auth/create/Step2.tsx:127 msgid "Choose your password" msgstr "अपना पासवर्ड चुनें" @@ -476,8 +492,8 @@ msgstr "" 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/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 msgid "Clear search query" msgstr "खोज क्वेरी साफ़ करें" @@ -537,8 +553,8 @@ msgstr "खाते को हटा दें" msgid "Confirmation code" msgstr "OTP कोड" -#: src/view/com/auth/create/CreateAccount.tsx:178 -#: src/view/com/auth/login/LoginForm.tsx:268 +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:269 msgid "Connecting..." msgstr "कनेक्टिंग ..।" @@ -577,11 +593,11 @@ msgstr "कॉपी कर ली" msgid "Copy" msgstr "कॉपी" -#: src/view/screens/ProfileList.tsx:384 +#: src/view/screens/ProfileList.tsx:385 msgid "Copy link to list" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "" @@ -589,7 +605,7 @@ msgstr "" msgid "Copy link to profile" msgstr "" -#: src/view/com/util/forms/PostDropdownBtn.tsx:115 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "पोस्ट टेक्स्ट कॉपी करें" @@ -597,11 +613,11 @@ msgstr "पोस्ट टेक्स्ट कॉपी करें" msgid "Copyright Policy" msgstr "कॉपीराइट नीति" -#: src/view/screens/ProfileFeed.tsx:94 +#: src/view/screens/ProfileFeed.tsx:95 msgid "Could not load feed" msgstr "फ़ीड लोड नहीं कर सकता" -#: src/view/screens/ProfileList.tsx:830 +#: src/view/screens/ProfileList.tsx:839 msgid "Could not load list" msgstr "सूची लोड नहीं कर सकता" @@ -610,7 +626,7 @@ msgstr "सूची लोड नहीं कर सकता" msgid "Create a new account" msgstr "नया खाता बनाएं" -#: src/view/com/auth/create/CreateAccount.tsx:124 +#: src/view/com/auth/create/CreateAccount.tsx:121 msgid "Create Account" msgstr "खाता बनाएँ" @@ -649,8 +665,8 @@ msgstr "खाता हटाएं" msgid "Delete app password" msgstr "अप्प पासवर्ड हटाएं" -#: src/view/screens/ProfileList.tsx:351 -#: src/view/screens/ProfileList.tsx:411 +#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:412 msgid "Delete List" msgstr "सूची हटाएँ" @@ -662,15 +678,15 @@ msgstr "मेरा खाता हटाएं" msgid "Delete my account…" msgstr "मेरा खाता हटाएं…" -#: src/view/com/util/forms/PostDropdownBtn.tsx:183 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "पोस्ट को हटाएं" -#: src/view/com/util/forms/PostDropdownBtn.tsx:187 +#: 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 "यह पोस्ट मिटाई जा चुकी है" @@ -689,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 "" @@ -745,7 +765,7 @@ msgstr "प्रत्येक कोड एक बार काम करत msgid "Edit image" msgstr "छवि संपादित करें" -#: src/view/screens/ProfileList.tsx:399 +#: src/view/screens/ProfileList.tsx:400 msgid "Edit list details" msgstr "सूची विवरण संपादित करें" @@ -770,14 +790,14 @@ msgstr "मेरी प्रोफ़ाइल संपादित करे msgid "Edit Saved Feeds" msgstr "एडिट सेव्ड फीड" -#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/create/Step2.tsx:108 #: src/view/com/auth/login/ForgotPasswordForm.tsx:148 #: src/view/com/modals/ChangeEmail.tsx:141 #: src/view/com/modals/Waitlist.tsx:88 msgid "Email" msgstr "ईमेल" -#: src/view/com/auth/create/Step2.tsx:81 +#: src/view/com/auth/create/Step2.tsx:99 msgid "Email address" msgstr "ईमेल" @@ -793,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 "" @@ -809,7 +829,7 @@ msgstr "आप जिस डोमेन का उपयोग करना च 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 "वह ईमेल दर्ज करें जिसका उपयोग आपने अपना खाता बनाने के लिए किया था। हम आपको एक \"reset code\" भेजेंगे ताकि आप एक नया पासवर्ड सेट कर सकें।" -#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:104 msgid "Enter your email address" msgstr "अपना ईमेल पता दर्ज करें" @@ -821,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 "" @@ -838,7 +858,7 @@ msgstr "ऑल्ट टेक्स्ट" msgid "Failed to load recommended feeds" msgstr "अनुशंसित फ़ीड लोड करने में विफल" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:556 msgid "Feed offline" msgstr "फ़ीड ऑफ़लाइन है" @@ -846,17 +866,17 @@ msgstr "फ़ीड ऑफ़लाइन है" msgid "Feed Preferences" msgstr "फ़ीड प्राथमिकता" -#: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "प्रतिक्रिया" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx: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:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "सभी फ़ीड" @@ -868,11 +888,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:427 msgid "Find users on Bluesky" msgstr "" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:425 msgid "Find users with the search tool on the right" msgstr "" @@ -929,11 +949,11 @@ msgstr "सुरक्षा कारणों के लिए, हमें msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "सुरक्षा कारणों के लिए, आप इसे फिर से देखने में सक्षम नहीं होंगे। यदि आप इस पासवर्ड को खो देते हैं, तो आपको एक नया उत्पन्न करना होगा।।" -#: src/view/com/auth/login/LoginForm.tsx:231 +#: src/view/com/auth/login/LoginForm.tsx:232 msgid "Forgot" msgstr "भूल" -#: src/view/com/auth/login/LoginForm.tsx:228 +#: src/view/com/auth/login/LoginForm.tsx:229 msgid "Forgot password" msgstr "पासवर्ड भूल गए" @@ -950,22 +970,22 @@ msgstr "गैलरी" msgid "Get Started" msgstr "प्रारंभ करें" -#: src/view/com/auth/LoggedOut.tsx:70 -#: src/view/com/auth/LoggedOut.tsx:71 +#: 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 "वापस जाओ" -#: src/view/screens/ProfileFeed.tsx:103 -#: src/view/screens/ProfileFeed.tsx:108 -#: src/view/screens/ProfileList.tsx:839 -#: src/view/screens/ProfileList.tsx:844 +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 msgid "Go Back" msgstr "वापस जाओ" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/LoginForm.tsx:279 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "अगला" @@ -974,8 +994,8 @@ msgstr "अगला" msgid "Handle" msgstr "हैंडल" -#: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "सहायता" @@ -983,12 +1003,20 @@ msgstr "सहायता" msgid "Here is your app password." msgstr "यहां आपका ऐप पासवर्ड है." -#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/notifications/FeedItem.tsx:324 #: src/view/com/util/moderation/ContentHider.tsx:103 msgid "Hide" msgstr "इसे छिपाएं" -#: src/view/com/notifications/FeedItem.tsx:308 +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" msgstr "उपयोगकर्ता सूची छुपाएँ" @@ -1021,9 +1049,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:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "होम फीड" @@ -1054,7 +1082,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 पाठ" @@ -1081,7 +1109,7 @@ msgstr "आमंत्रण भेजो" msgid "Invite a Friend" msgstr "एक दोस्त को आमंत्रित करें" -#: src/view/com/auth/create/Step2.tsx:57 +#: src/view/com/auth/create/Step2.tsx:72 msgid "Invite code" msgstr "आमंत्रण कोड" @@ -1089,7 +1117,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 "" @@ -1101,8 +1129,8 @@ msgstr "" msgid "Join the waitlist" msgstr "प्रतीक्षा सूची में शामिल हों" -#: src/view/com/auth/create/Step2.tsx:68 -#: src/view/com/auth/create/Step2.tsx:72 +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 msgid "Join the waitlist." msgstr "प्रतीक्षा सूची में शामिल हों।।" @@ -1166,7 +1194,7 @@ msgstr "चित्र पुस्तकालय" #~ msgid "Light" #~ msgstr "लाइट मोड" -#: src/view/screens/ProfileFeed.tsx:577 +#: src/view/screens/ProfileFeed.tsx:586 msgid "Like this feed" msgstr "इस फ़ीड को लाइक करो" @@ -1175,7 +1203,7 @@ msgstr "इस फ़ीड को लाइक करो" msgid "Liked by" msgstr "इन यूजर ने लाइक किया है" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "" @@ -1195,19 +1223,19 @@ 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:379 +#: 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 "अधिक पोस्ट लोड करें" -#: src/view/screens/Notifications.tsx:144 +#: src/view/screens/Notifications.tsx:148 msgid "Load new notifications" msgstr "नई सूचनाएं लोड करें" @@ -1243,7 +1271,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 "" @@ -1265,9 +1293,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:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "मॉडरेशन" @@ -1284,8 +1312,8 @@ msgid "More feeds" msgstr "अधिक फ़ीड" #: src/view/com/profile/ProfileHeader.tsx:548 -#: src/view/screens/ProfileFeed.tsx:360 -#: src/view/screens/ProfileList.tsx:583 +#: src/view/screens/ProfileFeed.tsx:361 +#: src/view/screens/ProfileList.tsx:584 msgid "More options" msgstr "अधिक विकल्प" @@ -1297,19 +1325,19 @@ msgstr "अधिक विकल्प" msgid "Mute Account" msgstr "खाता म्यूट करें" -#: src/view/screens/ProfileList.tsx:510 +#: src/view/screens/ProfileList.tsx:511 msgid "Mute accounts" msgstr "खातों को म्यूट करें" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Mute list" msgstr "" -#: src/view/screens/ProfileList.tsx:270 +#: src/view/screens/ProfileList.tsx:271 msgid "Mute these accounts?" msgstr "इन खातों को म्यूट करें?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Mute thread" msgstr "थ्रेड म्यूट करें" @@ -1317,15 +1345,15 @@ 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 "म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं." -#: src/view/screens/ProfileList.tsx:272 +#: src/view/screens/ProfileList.tsx:273 msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." msgstr "म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।" @@ -1341,7 +1369,7 @@ msgstr "जन्मदिन" msgid "My Feeds" msgstr "मेरी फ़ीड" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "मेरी प्रोफाइल" @@ -1364,23 +1392,23 @@ 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/ProfileFeed.tsx:430 -#: src/view/screens/ProfileList.tsx:193 -#: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 msgid "New post" msgstr "नई पोस्ट" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:258 msgid "New Post" msgstr "नई पोस्ट" -#: src/view/com/auth/create/CreateAccount.tsx:158 +#: 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/LoginForm.tsx:282 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1391,14 +1419,15 @@ msgstr "अगला" msgid "Next image" msgstr "अगली फोटो" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:191 #: src/view/screens/PreferencesHomeFeed.tsx:226 #: src/view/screens/PreferencesHomeFeed.tsx:263 msgid "No" msgstr "नहीं" -#: src/view/screens/ProfileFeed.tsx:570 -#: src/view/screens/ProfileList.tsx:711 +#: src/view/screens/ProfileFeed.tsx:579 +#: src/view/screens/ProfileList.tsx:720 msgid "No description" msgstr "कोई विवरण नहीं" @@ -1416,9 +1445,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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "" @@ -1447,12 +1476,12 @@ msgstr "" #~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" -#: src/view/screens/Notifications.tsx:109 -#: src/view/screens/Notifications.tsx:133 +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "सूचनाएं" @@ -1464,7 +1493,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 पाठ याद आती हैं।।" @@ -1480,8 +1509,8 @@ msgstr "ओपन नेविगेशन" msgid "Opens configurable language settings" msgstr "भाषा सेटिंग्स खोलें" -#: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "" @@ -1517,6 +1546,10 @@ msgstr "सिस्टम लॉग पेज खोलें" msgid "Opens the threads preferences" msgstr "धागे वरीयताओं को खोलता है" +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + #: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "अन्य खाता" @@ -1534,9 +1567,9 @@ msgstr "अन्य..।" msgid "Page not found" msgstr "पृष्ठ नहीं मिला" -#: 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/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1584,16 +1617,25 @@ 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." +msgid "Please tell us why you think this content warning was incorrectly applied!" msgstr "" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "" + +#: src/view/com/composer/Composer.tsx: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 "छुपा पोस्ट" @@ -1605,11 +1647,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 "" @@ -1629,11 +1671,13 @@ msgstr "प्राथमिक भाषा" msgid "Prioritize Your Follows" msgstr "अपने फ़ॉलोअर्स को प्राथमिकता दें" -#: src/view/shell/desktop/RightNav.tsx:76 +#: src/view/shell/desktop/RightNav.tsx:84 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 "गोपनीयता नीति" @@ -1642,14 +1686,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:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 msgid "Profile" msgstr "प्रोफ़ाइल" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।" @@ -1709,7 +1753,7 @@ msgstr "फ़ीड हटाएँ" #: src/view/com/feeds/FeedSourceCard.tsx:105 #: src/view/com/feeds/FeedSourceCard.tsx:172 -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Remove from my feeds" msgstr "मेरे फ़ीड से हटाएँ" @@ -1734,7 +1778,7 @@ msgstr "इस फ़ीड को सहेजे गए फ़ीड से msgid "Removed from list" msgstr "" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "" @@ -1754,16 +1798,16 @@ msgstr "रिपोर्ट {collectionName}" msgid "Report Account" msgstr "रिपोर्ट" -#: src/view/screens/ProfileFeed.tsx:290 +#: src/view/screens/ProfileFeed.tsx:291 msgid "Report feed" msgstr "रिपोर्ट फ़ीड" -#: src/view/screens/ProfileList.tsx:425 +#: src/view/screens/ProfileList.tsx:426 msgid "Report List" msgstr "रिपोर्ट सूची" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:165 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "रिपोर्ट पोस्ट" @@ -1793,7 +1837,7 @@ msgstr "अनुरोध बदलें" #~ msgid "Require alt text before posting" #~ msgstr "पोस्ट करने से पहले वैकल्पिक टेक्स्ट की आवश्यकता है" -#: src/view/com/auth/create/Step2.tsx:53 +#: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "इस प्रदाता के लिए आवश्यक" @@ -1821,10 +1865,10 @@ msgstr "ऑनबोर्डिंग स्टेट को रीसेट msgid "Resets the preferences state" msgstr "प्राथमिकताओं की स्थिति को रीसेट करें" +#: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/create/CreateAccount.tsx:171 -#: src/view/com/auth/login/LoginForm.tsx:258 -#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/auth/login/LoginForm.tsx:259 +#: src/view/com/auth/login/LoginForm.tsx:262 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" @@ -1834,9 +1878,9 @@ msgstr "फिर से कोशिश करो" #~ msgid "Retry change handle" #~ msgstr "हैंडल बदलना फिर से कोशिश करो" -#: src/view/com/modals/AltImage.tsx:114 -#: src/view/com/modals/BirthDateSettings.tsx:93 -#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 #: src/view/com/modals/CreateOrEditList.tsx:249 #: src/view/com/modals/CreateOrEditList.tsx:257 @@ -1844,7 +1888,7 @@ msgstr "फिर से कोशिश करो" msgid "Save" msgstr "सेव करो" -#: src/view/com/modals/AltImage.tsx:105 +#: src/view/com/modals/AltImage.tsx:106 msgid "Save alt text" msgstr "सेव ऑल्ट टेक्स्ट" @@ -1869,15 +1913,15 @@ msgid "Saved Feeds" 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/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:324 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "खोज" @@ -1885,6 +1929,11 @@ msgstr "खोज" #~ msgid "Search for posts and users." #~ msgstr "" +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +msgid "Search for users" +msgstr "" + #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" msgstr "सुरक्षा चरण आवश्यक" @@ -1929,8 +1978,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 "प्रतिक्रिया भेजें" @@ -1963,9 +2012,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:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "सेटिंग्स" @@ -1974,12 +2023,12 @@ msgid "Sexual activity or erotic nudity." msgstr "यौन गतिविधि या कामुक नग्नता।।" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 -#: src/view/screens/ProfileList.tsx:384 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:385 msgid "Share" msgstr "शेयर" -#: src/view/screens/ProfileFeed.tsx:302 +#: src/view/screens/ProfileFeed.tsx:303 msgid "Share feed" msgstr "" @@ -2016,7 +2065,7 @@ msgstr "अन्य सभी उत्तरों से पहले उन msgid "Show Reposts" msgstr "रीपोस्ट दिखाएँ" -#: src/view/com/notifications/FeedItem.tsx:337 +#: src/view/com/notifications/FeedItem.tsx:345 msgid "Show users" msgstr "लोग दिखाएँ" @@ -2115,15 +2164,15 @@ msgstr "Storybook" msgid "Submit" msgstr "" -#: src/view/screens/ProfileList.tsx:574 +#: src/view/screens/ProfileList.tsx:575 msgid "Subscribe" msgstr "सब्सक्राइब" -#: src/view/screens/ProfileList.tsx:570 +#: src/view/screens/ProfileList.tsx:571 msgid "Subscribe to this list" msgstr "इस सूची को सब्सक्राइब करें" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:362 msgid "Suggested Follows" msgstr "अनुशंसित लोग" @@ -2148,16 +2197,18 @@ msgstr "सिस्टम लॉग" msgid "Tall" msgstr "लंबा" -#: src/view/shell/desktop/RightNav.tsx:85 +#: src/view/shell/desktop/RightNav.tsx:93 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 "सेवा की शर्तें" #: src/view/com/modals/AppealLabel.tsx:70 -#: src/view/com/modals/report/InputIssueDetails.tsx:50 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 msgid "Text input field" msgstr "पाठ इनपुट फ़ील्ड" @@ -2173,7 +2224,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 "हो सकता है कि यह पोस्ट हटा दी गई हो।" @@ -2194,8 +2245,8 @@ msgid "There was an unexpected issue in the application. Please let us know if t msgstr "एप्लिकेशन में एक अप्रत्याशित समस्या थी. कृपया हमें बताएं कि क्या आपके साथ ऐसा हुआ है!" #: src/view/com/util/moderation/LabelInfo.tsx:45 -msgid "This {0} has been labeled." -msgstr "" +#~ msgid "This {0} has been labeled." +#~ msgstr "" #: src/view/com/util/moderation/ScreenHider.tsx:88 msgid "This {screenDescription} has been flagged:" @@ -2229,7 +2280,7 @@ msgstr "यह वह सेवा है जो आपको ऑनलाइन msgid "This link is taking you to the following website:" msgstr "यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:" -#: src/view/com/post-thread/PostThreadItem.tsx:124 +#: src/view/com/post-thread/PostThreadItem.tsx:123 msgid "This post has been deleted." msgstr "इस पोस्ट को हटा दिया गया है।।" @@ -2237,6 +2288,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" @@ -2254,9 +2309,9 @@ msgstr "ड्रॉपडाउन टॉगल करें" msgid "Transformations" msgstr "परिवर्तन" -#: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/post-thread/PostThreadItem.tsx:708 -#: src/view/com/util/forms/PostDropdownBtn.tsx:101 +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "अनुवाद" @@ -2264,15 +2319,15 @@ msgstr "अनुवाद" msgid "Try again" msgstr "फिर से कोशिश करो" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Un-block list" msgstr "" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Un-mute list" msgstr "" -#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/create/CreateAccount.tsx:65 #: 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." @@ -2300,11 +2355,11 @@ msgstr "" msgid "Unmute Account" msgstr "अनम्यूट खाता" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "थ्रेड को अनम्यूट करें" -#: src/view/screens/ProfileList.tsx:440 +#: src/view/screens/ProfileList.tsx:441 msgid "Unpin moderation list" msgstr "" @@ -2349,11 +2404,11 @@ msgid "User Lists" msgstr "लोग सूचियाँ" #: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:187 +#: src/view/com/auth/login/LoginForm.tsx:188 msgid "Username or email address" msgstr "यूजर नाम या ईमेल पता" -#: src/view/screens/ProfileList.tsx:738 +#: src/view/screens/ProfileList.tsx:747 msgid "Users" msgstr "यूजर लोग" @@ -2369,15 +2424,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 "मेरी ईमेल सत्यापित करें" @@ -2398,7 +2453,7 @@ msgstr "अवतार देखें" msgid "Visit Site" msgstr "साइट पर जाएं" -#: src/view/com/auth/create/CreateAccount.tsx:125 +#: src/view/com/auth/create/CreateAccount.tsx:122 msgid "We're so excited to have you join us!" msgstr "हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!" @@ -2410,7 +2465,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:243 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2451,7 +2506,7 @@ msgstr "" msgid "Wide" msgstr "चौड़ा" -#: src/view/com/composer/Composer.tsx:409 +#: src/view/com/composer/Composer.tsx:413 msgid "Write post" msgstr "पोस्ट लिखो" @@ -2459,6 +2514,7 @@ msgstr "पोस्ट लिखो" msgid "Write your reply" msgstr "अपना जवाब दें" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:192 #: src/view/screens/PreferencesHomeFeed.tsx:227 #: src/view/screens/PreferencesHomeFeed.tsx:262 @@ -2490,20 +2546,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 "आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता ब्लॉक करें\" चुनें।" @@ -2511,7 +2567,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 "आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता म्यूट करें\" चुनें।" @@ -2519,11 +2575,11 @@ msgstr "आपने अभी तक कोई खाता म्यूट न msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." msgstr "आपको \"reset code\" के साथ एक ईमेल प्राप्त होगा। उस कोड को यहाँ दर्ज करें, फिर अपना नया पासवर्ड दर्ज करें।।" -#: src/view/com/auth/create/Step2.tsx:43 +#: src/view/com/auth/create/Step2.tsx:58 msgid "Your account" msgstr "आपका खाता" -#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:146 msgid "Your birth date" msgstr "जन्म तिथि" @@ -2553,8 +2609,8 @@ msgid "Your hosting provider" msgstr "आपका होस्टिंग प्रदाता" #: src/view/screens/Settings.tsx:402 -#: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po index 7858a85cec..c9d5573aad 100644 --- a/src/locale/locales/ja/messages.po +++ b/src/locale/locales/ja/messages.po @@ -9,11 +9,11 @@ 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" -#: src/view/shell/desktop/RightNav.tsx:160 +#: src/view/shell/desktop/RightNav.tsx:168 msgid "{0, plural, one {# invite code available} other {# invite codes available}}" msgstr "{0, plural, other {# 個の招待コードが利用可能}}" @@ -25,21 +25,21 @@ msgstr "{0}" msgid "{0} {purposeLabel} List" msgstr "{0} {purposeLabel} リスト" -#: src/view/shell/desktop/RightNav.tsx:143 +#: src/view/shell/desktop/RightNav.tsx:151 msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" 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}" @@ -55,6 +55,10 @@ msgstr "<1>おすすめの<2>フィード<0>を選択" msgid "<0>Follow some<1>Recommended<2>Users" msgstr "<1>おすすめの<2>ユーザー<0>をフォロー" +#: 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 "新しいバージョンのアプリが利用可能です。継続して使用するためにはアップデートしてください。" @@ -75,7 +79,7 @@ msgstr "アカウントオプション" #: src/view/com/modals/ListAddRemoveUsers.tsx:264 #: src/view/com/modals/UserAddRemoveLists.tsx:193 -#: src/view/screens/ProfileList.tsx:754 +#: src/view/screens/ProfileList.tsx:763 msgid "Add" msgstr "追加" @@ -83,7 +87,7 @@ msgstr "追加" msgid "Add a content warning" msgstr "コンテンツの警告を追加" -#: src/view/screens/ProfileList.tsx:744 +#: src/view/screens/ProfileList.tsx:753 msgid "Add a user to this list" msgstr "リストにユーザーを追加" @@ -106,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 "リンクカードを追加:" @@ -122,7 +126,7 @@ msgstr "次のDNSレコードをドメインに追加してください:" msgid "Add to Lists" msgstr "リストに追加" -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Add to my feeds" msgstr "マイフィードに追加" @@ -163,7 +167,7 @@ msgstr "メールが{0}に送信されました。以下に入力できる確認 msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." msgstr "以前のメールアドレス{0}にメールが送信されました。以下に入力できる確認コードがそのメールに記載されています。" -#: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/notifications/FeedItem.tsx:237 #: src/view/com/threadgate/WhoCanReply.tsx:178 msgid "and" msgstr "および" @@ -180,15 +184,23 @@ msgstr "アプリパスワード" msgid "App Passwords" msgstr "アプリパスワード" -#: src/view/com/modals/AppealLabel.tsx:65 -msgid "Appeal Decision" -msgstr "判断に異議" +#: src/view/com/util/forms/PostDropdownBtn.tsx:236 +msgid "Appeal content warning" +msgstr "" -#: src/view/com/util/moderation/LabelInfo.tsx:51 +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Content Warning" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +#~ msgid "Appeal Decision" +#~ msgstr "判断に異議" + +#: src/view/com/util/moderation/LabelInfo.tsx:52 msgid "Appeal this decision" msgstr "この判断に異議を申し立てる" -#: src/view/com/util/moderation/LabelInfo.tsx:55 +#: src/view/com/util/moderation/LabelInfo.tsx:56 msgid "Appeal this decision." msgstr "この判断に異議を申し立てる" @@ -204,11 +216,11 @@ msgstr "本当にアプリパスワード「{name}」を削除しますか?" msgid "Are you sure you'd like to discard this draft?" msgstr "本当にこの下書きを破棄しますか?" -#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:353 msgid "Are you sure?" msgstr "本当によろしいですか?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:188 +#: src/view/com/util/forms/PostDropdownBtn.tsx:219 msgid "Are you sure? This cannot be undone." msgstr "本当によろしいですか?これは元に戻せません。" @@ -216,15 +228,15 @@ msgstr "本当によろしいですか?これは元に戻せません。" msgid "Artistic or non-erotic nudity." msgstr "芸術的または性的ではないヌード。" -#: src/view/com/auth/create/CreateAccount.tsx:145 +#: 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/LoginForm.tsx:250 #: 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/modals/report/InputIssueDetails.tsx:46 +#: src/view/com/post-thread/PostThread.tsx:388 +#: src/view/com/post-thread/PostThread.tsx:438 +#: src/view/com/post-thread/PostThread.tsx:446 #: src/view/com/profile/ProfileHeader.tsx:672 msgid "Back" msgstr "戻る" @@ -233,8 +245,8 @@ msgstr "戻る" msgid "Basics" msgstr "基本" -#: src/view/com/auth/create/Step2.tsx:131 -#: src/view/com/modals/BirthDateSettings.tsx:72 +#: src/view/com/auth/create/Step2.tsx:156 +#: src/view/com/modals/BirthDateSettings.tsx:73 msgid "Birthday" msgstr "誕生日" @@ -247,15 +259,15 @@ msgstr "誕生日:" msgid "Block Account" msgstr "アカウントをブロック" -#: src/view/screens/ProfileList.tsx:522 +#: src/view/screens/ProfileList.tsx:523 msgid "Block accounts" msgstr "アカウントをブロック" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Block list" msgstr "リストをブロック" -#: src/view/screens/ProfileList.tsx:307 +#: src/view/screens/ProfileList.tsx:308 msgid "Block these accounts?" msgstr "これらのアカウントをブロックしますか?" @@ -263,7 +275,7 @@ msgstr "これらのアカウントをブロックしますか?" msgid "Blocked accounts" msgstr "ブロック中のアカウント" -#: src/view/screens/ModerationBlockedAccounts.tsx:106 +#: src/view/screens/ModerationBlockedAccounts.tsx:107 msgid "Blocked Accounts" msgstr "ブロック中のアカウント" @@ -271,15 +283,15 @@ 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 "投稿をブロックしました。" -#: src/view/screens/ProfileList.tsx:309 +#: src/view/screens/ProfileList.tsx:310 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "ブロックしたことは公開されます。ブロック中のアカウントは、あなたのスレッドでの返信、あなたへのメンション、その他の方法であなたとやり取りすることはできません。" @@ -333,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 @@ -348,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:601 #: src/view/shell/desktop/Search.tsx:182 msgid "Cancel" msgstr "キャンセル" @@ -358,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テキストの追加をキャンセル" @@ -420,6 +432,10 @@ msgstr "おすすめのユーザーを確認してください。フォローす msgid "Check your inbox for an email with the confirmation code to enter below:" msgstr "入力したメールアドレスの受信トレイを確認して、以下に入力するための確認コードが記載されたメールが届いていないか確認してください:" +#: src/view/com/modals/Threadgate.tsx:72 +msgid "Choose \"Everybody\" or \"Nobody\"" +msgstr "" + #: src/view/com/modals/ServerInput.tsx:38 msgid "Choose Service" msgstr "サービスを選択" @@ -428,7 +444,7 @@ msgstr "サービスを選択" msgid "Choose the algorithms that power your experience with custom feeds." msgstr "カスタムフィードを使用してあなたの体験を強化するアルゴリズムを選択します。" -#: src/view/com/auth/create/Step2.tsx:106 +#: src/view/com/auth/create/Step2.tsx:127 msgid "Choose your password" msgstr "パスワードを選択" @@ -448,8 +464,8 @@ msgstr "すべてのストレージデータをクリア" 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/com/util/forms/SearchInput.tsx:74 +#: src/view/screens/Search/Search.tsx:582 msgid "Clear search query" msgstr "検索クエリをクリア" @@ -509,8 +525,8 @@ msgstr "アカウントの削除を確認" msgid "Confirmation code" msgstr "確認コード" -#: src/view/com/auth/create/CreateAccount.tsx:178 -#: src/view/com/auth/login/LoginForm.tsx:268 +#: src/view/com/auth/create/CreateAccount.tsx:174 +#: src/view/com/auth/login/LoginForm.tsx:269 msgid "Connecting..." msgstr "接続中..." @@ -549,11 +565,11 @@ msgstr "コピーしました" msgid "Copy" msgstr "コピー" -#: src/view/screens/ProfileList.tsx:384 +#: src/view/screens/ProfileList.tsx:385 msgid "Copy link to list" msgstr "リストへのリンクをコピー" -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 msgid "Copy link to post" msgstr "投稿へのリンクをコピー" @@ -561,7 +577,7 @@ msgstr "投稿へのリンクをコピー" msgid "Copy link to profile" msgstr "プロフィールへのリンクをコピー" -#: src/view/com/util/forms/PostDropdownBtn.tsx:115 +#: src/view/com/util/forms/PostDropdownBtn.tsx:125 msgid "Copy post text" msgstr "投稿のテキストをコピー" @@ -569,11 +585,11 @@ msgstr "投稿のテキストをコピー" msgid "Copyright Policy" msgstr "著作権ポリシー" -#: src/view/screens/ProfileFeed.tsx:94 +#: src/view/screens/ProfileFeed.tsx:95 msgid "Could not load feed" msgstr "フィードのロードに失敗しました" -#: src/view/screens/ProfileList.tsx:830 +#: src/view/screens/ProfileList.tsx:839 msgid "Could not load list" msgstr "リストのロードに失敗しました" @@ -582,7 +598,7 @@ msgstr "リストのロードに失敗しました" msgid "Create a new account" msgstr "新しいアカウントを作成" -#: src/view/com/auth/create/CreateAccount.tsx:124 +#: src/view/com/auth/create/CreateAccount.tsx:121 msgid "Create Account" msgstr "アカウントを作成" @@ -617,8 +633,8 @@ msgstr "アカウントを削除" msgid "Delete app password" msgstr "アプリパスワードを削除" -#: src/view/screens/ProfileList.tsx:351 -#: src/view/screens/ProfileList.tsx:411 +#: src/view/screens/ProfileList.tsx:352 +#: src/view/screens/ProfileList.tsx:412 msgid "Delete List" msgstr "リストを削除" @@ -630,15 +646,15 @@ msgstr "マイアカウントを削除" msgid "Delete my account…" msgstr "マイアカウントを削除…" -#: src/view/com/util/forms/PostDropdownBtn.tsx:183 +#: src/view/com/util/forms/PostDropdownBtn.tsx:214 msgid "Delete post" msgstr "投稿を削除" -#: src/view/com/util/forms/PostDropdownBtn.tsx:187 +#: 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 "投稿を削除しました。" @@ -657,6 +673,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 "破棄" @@ -713,7 +733,7 @@ msgstr "それぞれのコードは一度ずつ動作します。定期的に招 msgid "Edit image" msgstr "画像を編集" -#: src/view/screens/ProfileList.tsx:399 +#: src/view/screens/ProfileList.tsx:400 msgid "Edit list details" msgstr "リストの詳細を編集" @@ -738,14 +758,14 @@ msgstr "プロフィールを編集" msgid "Edit Saved Feeds" msgstr "保存されたフィードを編集" -#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/create/Step2.tsx:108 #: src/view/com/auth/login/ForgotPasswordForm.tsx:148 #: src/view/com/modals/ChangeEmail.tsx:141 #: src/view/com/modals/Waitlist.tsx:88 msgid "Email" msgstr "メールアドレス" -#: src/view/com/auth/create/Step2.tsx:81 +#: src/view/com/auth/create/Step2.tsx:99 msgid "Email address" msgstr "メールアドレス" @@ -759,9 +779,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 "フィードの終わり" @@ -777,7 +797,7 @@ msgstr "使用するドメインを入力してください" msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." msgstr "アカウントの作成に使用したメールアドレスを入力します。新しいパスワードを設定できるように、「リセットコード」をお送りします。" -#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:104 msgid "Enter your email address" msgstr "メールアドレスを入力してください" @@ -789,7 +809,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 "エラー:" @@ -806,7 +826,7 @@ msgstr "ALTテキストを展開" msgid "Failed to load recommended feeds" msgstr "おすすめのフィードのロードに失敗しました" -#: src/view/screens/Feeds.tsx:559 +#: src/view/screens/Feeds.tsx:556 msgid "Feed offline" msgstr "フィードはオフラインです" @@ -814,17 +834,17 @@ msgstr "フィードはオフラインです" msgid "Feed Preferences" msgstr "フィードの設定" -#: src/view/shell/desktop/RightNav.tsx:65 -#: src/view/shell/Drawer.tsx:292 +#: src/view/shell/desktop/RightNav.tsx:73 +#: src/view/shell/Drawer.tsx:311 msgid "Feedback" msgstr "フィードバック" #: src/view/screens/Feeds.tsx:475 -#: src/view/screens/Profile.tsx: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:342 +#: src/view/shell/Drawer.tsx:474 +#: src/view/shell/Drawer.tsx:475 msgid "Feeds" msgstr "フィード" @@ -836,11 +856,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:427 msgid "Find users on Bluesky" msgstr "Blueskyでユーザーを検索" -#: src/view/screens/Search/Search.tsx:420 +#: src/view/screens/Search/Search.tsx:425 msgid "Find users with the search tool on the right" msgstr "右側の検索ツールでユーザーを検索" @@ -866,11 +886,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" @@ -897,11 +917,11 @@ msgstr "セキュリティ上の理由から、メールアドレスに確認コ msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." msgstr "セキュリティ上の理由から、これを再度表示することはできません。このパスワードを紛失した場合は、新しいパスワードを生成する必要があります。" -#: src/view/com/auth/login/LoginForm.tsx:231 +#: src/view/com/auth/login/LoginForm.tsx:232 msgid "Forgot" msgstr "忘れた" -#: src/view/com/auth/login/LoginForm.tsx:228 +#: src/view/com/auth/login/LoginForm.tsx:229 msgid "Forgot password" msgstr "パスワードを忘れた" @@ -918,22 +938,22 @@ msgstr "ギャラリー" msgid "Get Started" msgstr "はじめに" -#: src/view/com/auth/LoggedOut.tsx:70 -#: src/view/com/auth/LoggedOut.tsx:71 +#: 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 "戻る" -#: src/view/screens/ProfileFeed.tsx:103 -#: src/view/screens/ProfileFeed.tsx:108 -#: src/view/screens/ProfileList.tsx:839 -#: src/view/screens/ProfileList.tsx:844 +#: src/view/screens/ProfileFeed.tsx:104 +#: src/view/screens/ProfileFeed.tsx:109 +#: src/view/screens/ProfileList.tsx:848 +#: src/view/screens/ProfileList.tsx:853 msgid "Go Back" msgstr "戻る" #: src/view/com/auth/login/ForgotPasswordForm.tsx:181 -#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/LoginForm.tsx:279 #: src/view/com/auth/login/SetNewPasswordForm.tsx:163 msgid "Go to next" msgstr "次へ" @@ -942,8 +962,8 @@ msgstr "次へ" msgid "Handle" msgstr "ハンドル" -#: src/view/shell/desktop/RightNav.tsx:94 -#: src/view/shell/Drawer.tsx:302 +#: src/view/shell/desktop/RightNav.tsx:102 +#: src/view/shell/Drawer.tsx:321 msgid "Help" msgstr "ヘルプ" @@ -951,12 +971,20 @@ msgstr "ヘルプ" msgid "Here is your app password." msgstr "アプリパスワードをお知らせします。" -#: src/view/com/notifications/FeedItem.tsx:316 +#: src/view/com/notifications/FeedItem.tsx:324 #: src/view/com/util/moderation/ContentHider.tsx:103 msgid "Hide" msgstr "非表示" -#: src/view/com/notifications/FeedItem.tsx:308 +#: src/view/com/util/forms/PostDropdownBtn.tsx:173 +msgid "Hide post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:177 +msgid "Hide this post?" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 msgid "Hide user list" msgstr "ユーザーリストを非表示" @@ -981,9 +1009,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:306 +#: src/view/shell/Drawer.tsx:398 +#: src/view/shell/Drawer.tsx:399 msgid "Home" msgstr "ホーム" @@ -991,7 +1019,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" @@ -1014,7 +1042,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テキスト" @@ -1036,7 +1064,7 @@ msgstr "招待" msgid "Invite a Friend" msgstr "友達を招待" -#: src/view/com/auth/create/Step2.tsx:57 +#: src/view/com/auth/create/Step2.tsx:72 msgid "Invite code" msgstr "招待コード" @@ -1044,7 +1072,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} 個" @@ -1056,8 +1084,8 @@ msgstr "仕事" msgid "Join the waitlist" msgstr "Waitlistに参加" -#: src/view/com/auth/create/Step2.tsx:68 -#: src/view/com/auth/create/Step2.tsx:72 +#: src/view/com/auth/create/Step2.tsx:86 +#: src/view/com/auth/create/Step2.tsx:90 msgid "Join the waitlist." msgstr "Waitlistに参加します。" @@ -1117,16 +1145,16 @@ msgstr "パスワードをリセットしましょう!" msgid "Library" msgstr "ライブラリー" -#: src/view/screens/ProfileFeed.tsx:577 +#: src/view/screens/ProfileFeed.tsx:586 msgid "Like this feed" msgstr "このフィードをいいね" #: src/view/screens/PostLikedBy.tsx:27 #: src/view/screens/ProfileFeedLikedBy.tsx:27 msgid "Liked by" -msgstr "いいねした人" +msgstr "いいねしたユーザー" -#: src/view/screens/Profile.tsx:163 +#: src/view/screens/Profile.tsx:164 msgid "Likes" msgstr "いいね" @@ -1136,31 +1164,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:379 +#: 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 +#: src/view/screens/Notifications.tsx:148 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..." @@ -1190,7 +1218,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 "メディア" @@ -1212,9 +1240,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:397 +#: src/view/shell/Drawer.tsx:509 +#: src/view/shell/Drawer.tsx:510 msgid "Moderation" msgstr "モデレーション" @@ -1231,8 +1259,8 @@ msgid "More feeds" msgstr "その他のフィード" #: src/view/com/profile/ProfileHeader.tsx:548 -#: src/view/screens/ProfileFeed.tsx:360 -#: src/view/screens/ProfileList.tsx:583 +#: src/view/screens/ProfileFeed.tsx:361 +#: src/view/screens/ProfileList.tsx:584 msgid "More options" msgstr "その他のオプション" @@ -1240,37 +1268,37 @@ msgstr "その他のオプション" msgid "Mute Account" msgstr "アカウントをミュート" -#: src/view/screens/ProfileList.tsx:510 +#: src/view/screens/ProfileList.tsx:511 msgid "Mute accounts" msgstr "アカウントをミュート" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Mute list" msgstr "リストをミュート" -#: src/view/screens/ProfileList.tsx:270 +#: src/view/screens/ProfileList.tsx:271 msgid "Mute these accounts?" msgstr "これらのアカウントをミュートしますか?" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: 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 +#: src/view/screens/ProfileList.tsx:273 msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." -msgstr "ミュートは非公開です。ミュートをされたアカウントはあなたと引き続き関わることができますが、そのアカウントの投稿や通知を受信することはできません。" +msgstr "ミュートの設定は非公開です。ミュート中のアカウントはあなたと引き続き関わることができますが、そのアカウントの投稿や通知を受信することはできません。" #: src/view/com/modals/BirthDateSettings.tsx:56 msgid "My Birthday" @@ -1280,7 +1308,7 @@ msgstr "誕生日" msgid "My Feeds" msgstr "マイフィード" -#: src/view/shell/desktop/LeftNav.tsx:64 +#: src/view/shell/desktop/LeftNav.tsx:65 msgid "My Profile" msgstr "マイプロフィール" @@ -1303,23 +1331,23 @@ 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/ProfileFeed.tsx:430 -#: src/view/screens/ProfileList.tsx:193 -#: src/view/screens/ProfileList.tsx:221 -#: src/view/shell/desktop/LeftNav.tsx:246 +#: src/view/screens/Feeds.tsx:507 +#: src/view/screens/Profile.tsx:354 +#: src/view/screens/ProfileFeed.tsx:431 +#: src/view/screens/ProfileList.tsx:194 +#: src/view/screens/ProfileList.tsx:222 +#: src/view/shell/desktop/LeftNav.tsx:248 msgid "New post" msgstr "新しい投稿" -#: src/view/shell/desktop/LeftNav.tsx:256 +#: src/view/shell/desktop/LeftNav.tsx:258 msgid "New Post" msgstr "新しい投稿" -#: src/view/com/auth/create/CreateAccount.tsx:158 +#: 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/LoginForm.tsx:282 #: src/view/com/auth/login/SetNewPasswordForm.tsx:156 #: src/view/com/auth/login/SetNewPasswordForm.tsx:166 #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 @@ -1330,14 +1358,15 @@ msgstr "次へ" msgid "Next image" msgstr "次の画像" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:191 #: src/view/screens/PreferencesHomeFeed.tsx:226 #: src/view/screens/PreferencesHomeFeed.tsx:263 msgid "No" msgstr "いいえ" -#: src/view/screens/ProfileFeed.tsx:570 -#: src/view/screens/ProfileList.tsx:711 +#: src/view/screens/ProfileFeed.tsx:579 +#: src/view/screens/ProfileList.tsx:720 msgid "No description" msgstr "説明はありません" @@ -1350,9 +1379,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:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:629 #: src/view/shell/desktop/Search.tsx:210 msgid "No results found for {query}" msgstr "「{query}」の検索結果はありません" @@ -1373,12 +1402,12 @@ msgstr "該当なし。" msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." msgstr "注記:Blueskyはオープンでパブリックなネットワークです。この設定はBlueskyのアプリおよびウェブサイト上のみでのあなたのコンテンツの可視性を制限するものであり、他のアプリではこの設定を尊重しない場合があります。他のアプリやウェブサイトでは、ログアウトしたユーザーにあなたのコンテンツが表示される場合があります。" -#: src/view/screens/Notifications.tsx:109 -#: src/view/screens/Notifications.tsx:133 +#: src/view/screens/Notifications.tsx:113 +#: src/view/screens/Notifications.tsx:137 #: src/view/shell/bottom-bar/BottomBar.tsx:205 -#: src/view/shell/desktop/LeftNav.tsx:358 -#: src/view/shell/Drawer.tsx:416 -#: src/view/shell/Drawer.tsx:417 +#: src/view/shell/desktop/LeftNav.tsx:361 +#: src/view/shell/Drawer.tsx:435 +#: src/view/shell/Drawer.tsx:436 msgid "Notifications" msgstr "通知" @@ -1390,7 +1419,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テキストがありません。" @@ -1406,8 +1435,8 @@ msgstr "ナビゲーションを開く" msgid "Opens configurable language settings" msgstr "構成可能な言語設定を開く" -#: src/view/shell/desktop/RightNav.tsx:148 -#: src/view/shell/Drawer.tsx:622 +#: src/view/shell/desktop/RightNav.tsx:156 +#: src/view/shell/Drawer.tsx:641 msgid "Opens list of invite codes" msgstr "招待コードのリストを開く" @@ -1443,6 +1472,10 @@ msgstr "システムログのページを開く" msgid "Opens the threads preferences" msgstr "スレッドの設定を開く" +#: src/view/com/modals/Threadgate.tsx:89 +msgid "Or combine these options:" +msgstr "" + #: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "その他のアカウント" @@ -1460,9 +1493,9 @@ msgstr "その他..." msgid "Page not found" msgstr "ページが見つかりません" -#: 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/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:132 +#: src/view/com/auth/login/LoginForm.tsx:217 #: src/view/com/auth/login/SetNewPasswordForm.tsx:130 #: src/view/com/modals/DeleteAccount.tsx:191 msgid "Password" @@ -1510,16 +1543,25 @@ 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 "この判断が誤っていると考える理由を教えてください。" +msgid "Please tell us why you think this content warning was incorrectly applied!" +msgstr "" -#: src/view/com/composer/Composer.tsx:337 -#: src/view/com/post-thread/PostThread.tsx:226 +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +#~ msgid "Please tell us why you think this decision was incorrect." +#~ msgstr "この判断が誤っていると考える理由を教えてください。" + +#: src/view/com/composer/Composer.tsx: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 "投稿を非表示" @@ -1531,11 +1573,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 "投稿" @@ -1555,11 +1597,13 @@ msgstr "第一言語" msgid "Prioritize Your Follows" msgstr "あなたのフォローを優先" -#: src/view/shell/desktop/RightNav.tsx:76 +#: src/view/shell/desktop/RightNav.tsx:84 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 "プライバシーポリシー" @@ -1568,14 +1612,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:415 +#: src/view/shell/Drawer.tsx:70 +#: src/view/shell/Drawer.tsx:544 +#: src/view/shell/Drawer.tsx:545 msgid "Profile" msgstr "プロフィール" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:808 msgid "Protect your account by verifying your email." msgstr "メールアドレスを確認してアカウントを保護します。" @@ -1630,7 +1674,7 @@ msgstr "フィードを削除" #: src/view/com/feeds/FeedSourceCard.tsx:105 #: src/view/com/feeds/FeedSourceCard.tsx:172 -#: src/view/screens/ProfileFeed.tsx:270 +#: src/view/screens/ProfileFeed.tsx:271 msgid "Remove from my feeds" msgstr "マイフィードから削除" @@ -1655,7 +1699,7 @@ msgstr "保存したフィードからこのフィードを削除しますか? msgid "Removed from list" msgstr "リストから削除されました" -#: src/view/screens/Profile.tsx:161 +#: src/view/screens/Profile.tsx:162 msgid "Replies" msgstr "返信" @@ -1675,16 +1719,16 @@ msgstr "{collectionName}を報告" msgid "Report Account" msgstr "アカウントを報告" -#: src/view/screens/ProfileFeed.tsx:290 +#: src/view/screens/ProfileFeed.tsx:291 msgid "Report feed" msgstr "フィードを報告" -#: src/view/screens/ProfileList.tsx:425 +#: src/view/screens/ProfileList.tsx:426 msgid "Report List" msgstr "リストを報告" #: src/view/com/modals/report/SendReportButton.tsx:37 -#: src/view/com/util/forms/PostDropdownBtn.tsx:165 +#: src/view/com/util/forms/PostDropdownBtn.tsx:196 msgid "Report post" msgstr "投稿を報告" @@ -1699,14 +1743,14 @@ 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 msgid "Request Change" msgstr "変更を要求" -#: src/view/com/auth/create/Step2.tsx:53 +#: src/view/com/auth/create/Step2.tsx:68 msgid "Required for this provider" msgstr "このプロバイダーに必要" @@ -1734,18 +1778,18 @@ msgstr "オンボーディングの状態をリセット" msgid "Resets the preferences state" msgstr "設定の状態をリセット" +#: src/view/com/auth/create/CreateAccount.tsx:163 #: src/view/com/auth/create/CreateAccount.tsx:167 -#: src/view/com/auth/create/CreateAccount.tsx:171 -#: src/view/com/auth/login/LoginForm.tsx:258 -#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/auth/login/LoginForm.tsx:259 +#: src/view/com/auth/login/LoginForm.tsx:262 #: src/view/com/util/error/ErrorMessage.tsx:55 #: src/view/com/util/error/ErrorScreen.tsx:65 msgid "Retry" msgstr "再試行" -#: src/view/com/modals/AltImage.tsx:114 -#: src/view/com/modals/BirthDateSettings.tsx:93 -#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/AltImage.tsx:115 +#: src/view/com/modals/BirthDateSettings.tsx:94 +#: src/view/com/modals/BirthDateSettings.tsx:97 #: src/view/com/modals/ChangeHandle.tsx:173 #: src/view/com/modals/CreateOrEditList.tsx:249 #: src/view/com/modals/CreateOrEditList.tsx:257 @@ -1753,7 +1797,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テキストを保存" @@ -1774,15 +1818,15 @@ msgid "Saved Feeds" 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/com/util/forms/SearchInput.tsx:65 +#: src/view/screens/Search/Search.tsx:406 +#: src/view/screens/Search/Search.tsx:572 #: src/view/shell/bottom-bar/BottomBar.tsx:159 -#: src/view/shell/desktop/LeftNav.tsx:321 +#: src/view/shell/desktop/LeftNav.tsx:324 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:343 -#: src/view/shell/Drawer.tsx:344 +#: src/view/shell/Drawer.tsx:362 +#: src/view/shell/Drawer.tsx:363 msgid "Search" msgstr "検索" @@ -1790,6 +1834,11 @@ msgstr "検索" #~ msgid "Search for posts and users." #~ msgstr "投稿とユーザーを検索します。" +#: src/view/com/auth/LoggedOut.tsx:104 +#: src/view/com/auth/LoggedOut.tsx:105 +msgid "Search for users" +msgstr "" + #: src/view/com/modals/ChangeEmail.tsx:110 msgid "Security Step Required" msgstr "必要なセキュリティの手順" @@ -1834,8 +1883,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 "フィードバックを送信" @@ -1849,15 +1898,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." @@ -1868,9 +1917,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:433 +#: src/view/shell/Drawer.tsx:565 +#: src/view/shell/Drawer.tsx:566 msgid "Settings" msgstr "設定" @@ -1879,12 +1928,12 @@ msgid "Sexual activity or erotic nudity." msgstr "性的行為または性的なヌード。" #: src/view/com/profile/ProfileHeader.tsx:338 -#: src/view/com/util/forms/PostDropdownBtn.tsx:129 -#: src/view/screens/ProfileList.tsx:384 +#: src/view/com/util/forms/PostDropdownBtn.tsx:139 +#: src/view/screens/ProfileList.tsx:385 msgid "Share" msgstr "共有" -#: src/view/screens/ProfileFeed.tsx:302 +#: src/view/screens/ProfileFeed.tsx:303 msgid "Share feed" msgstr "フィードを共有" @@ -1911,13 +1960,13 @@ 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" msgstr "リポストを表示" -#: src/view/com/notifications/FeedItem.tsx:337 +#: src/view/com/notifications/FeedItem.tsx:345 msgid "Show users" msgstr "ユーザーを表示" @@ -2016,15 +2065,15 @@ msgstr "ストーリーブック" msgid "Submit" msgstr "送信" -#: src/view/screens/ProfileList.tsx:574 +#: src/view/screens/ProfileList.tsx:575 msgid "Subscribe" msgstr "登録" -#: src/view/screens/ProfileList.tsx:570 +#: src/view/screens/ProfileList.tsx:571 msgid "Subscribe to this list" msgstr "このリストに登録" -#: src/view/screens/Search/Search.tsx:357 +#: src/view/screens/Search/Search.tsx:362 msgid "Suggested Follows" msgstr "おすすめのフォロー" @@ -2045,16 +2094,18 @@ msgstr "システムログ" msgid "Tall" msgstr "トール" -#: src/view/shell/desktop/RightNav.tsx:85 +#: src/view/shell/desktop/RightNav.tsx:93 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 "利用規約" #: src/view/com/modals/AppealLabel.tsx:70 -#: src/view/com/modals/report/InputIssueDetails.tsx:50 +#: src/view/com/modals/report/InputIssueDetails.tsx:51 msgid "Text input field" msgstr "テキストの入力フィールド" @@ -2070,7 +2121,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 "投稿が削除された可能性があります。" @@ -2091,8 +2142,8 @@ msgid "There was an unexpected issue in the application. Please let us know if t msgstr "アプリケーションに予期しない問題が発生しました。このようなことがありましたらお知らせください!" #: src/view/com/util/moderation/LabelInfo.tsx:45 -msgid "This {0} has been labeled." -msgstr "この{0}にはラベルが貼られています" +#~ msgid "This {0} has been labeled." +#~ msgstr "この{0}にはラベルが貼られています" #: src/view/com/util/moderation/ScreenHider.tsx:88 msgid "This {screenDescription} has been flagged:" @@ -2126,7 +2177,7 @@ msgstr "これはオンラインを維持するためのサービスです。" msgid "This link is taking you to the following website:" msgstr "このリンクは次のウェブサイトへリンクしています:" -#: src/view/com/post-thread/PostThreadItem.tsx:124 +#: src/view/com/post-thread/PostThreadItem.tsx:123 msgid "This post has been deleted." msgstr "この投稿は削除されました。" @@ -2134,6 +2185,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" @@ -2151,9 +2206,9 @@ msgstr "ドロップダウンをトグル" msgid "Transformations" msgstr "変換" -#: src/view/com/post-thread/PostThreadItem.tsx:706 -#: src/view/com/post-thread/PostThreadItem.tsx:708 -#: src/view/com/util/forms/PostDropdownBtn.tsx:101 +#: src/view/com/post-thread/PostThreadItem.tsx:705 +#: src/view/com/post-thread/PostThreadItem.tsx:707 +#: src/view/com/util/forms/PostDropdownBtn.tsx:111 msgid "Translate" msgstr "翻訳" @@ -2161,15 +2216,15 @@ msgstr "翻訳" msgid "Try again" msgstr "再試行" -#: src/view/screens/ProfileList.tsx:472 +#: src/view/screens/ProfileList.tsx:473 msgid "Un-block list" msgstr "リストでのブロックを解除" -#: src/view/screens/ProfileList.tsx:457 +#: src/view/screens/ProfileList.tsx:458 msgid "Un-mute list" msgstr "リストでのミュートを解除" -#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/create/CreateAccount.tsx:65 #: 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." @@ -2197,11 +2252,11 @@ msgstr "残念ながら、アカウントを作成するための要件を満た msgid "Unmute Account" msgstr "アカウントのミュートを解除" -#: src/view/com/util/forms/PostDropdownBtn.tsx:147 +#: src/view/com/util/forms/PostDropdownBtn.tsx:157 msgid "Unmute thread" msgstr "スレッドのミュートを解除" -#: src/view/screens/ProfileList.tsx:440 +#: src/view/screens/ProfileList.tsx:441 msgid "Unpin moderation list" msgstr "モデレーションリストのピン留めを解除" @@ -2246,11 +2301,11 @@ msgid "User Lists" msgstr "ユーザーリスト" #: src/view/com/auth/login/LoginForm.tsx:170 -#: src/view/com/auth/login/LoginForm.tsx:187 +#: src/view/com/auth/login/LoginForm.tsx:188 msgid "Username or email address" msgstr "ユーザー名またはメールアドレス" -#: src/view/screens/ProfileList.tsx:738 +#: src/view/screens/ProfileList.tsx:747 msgid "Users" msgstr "ユーザー" @@ -2262,15 +2317,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 "メールアドレスを確認" @@ -2291,11 +2346,11 @@ msgstr "アバターを表示" msgid "Visit Site" msgstr "サイトへアクセス" -#: src/view/com/auth/create/CreateAccount.tsx:125 +#: src/view/com/auth/create/CreateAccount.tsx:122 msgid "We're so excited to have you join us!" msgstr "私たちはあなたが参加してくれることをとても楽しみにしています!" -#: src/view/screens/Search/Search.tsx:238 +#: src/view/screens/Search/Search.tsx:243 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "大変申し訳ありませんが、検索を完了できませんでした。数分後に再試行してください。" @@ -2326,13 +2381,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 "投稿を書く" @@ -2340,6 +2395,7 @@ msgstr "投稿を書く" msgid "Write your reply" msgstr "返信を書く" +#: src/view/screens/PreferencesHomeFeed.tsx:120 #: src/view/screens/PreferencesHomeFeed.tsx:192 #: src/view/screens/PreferencesHomeFeed.tsx:227 #: src/view/screens/PreferencesHomeFeed.tsx:262 @@ -2371,20 +2427,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 "ブロック中のアカウントはまだありません。アカウントをブロックするには、ユーザーのプロフィールに移動し、アカウントメニューから「アカウントをブロック」を選択します。" @@ -2392,7 +2448,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 "ミュートしているアカウントはまだありません。アカウントをミュートするには、プロフィールに移動し、アカウントメニューから「アカウントをミュート」を選択します。" @@ -2400,11 +2456,11 @@ msgstr "ミュートしているアカウントはまだありません。アカ msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." msgstr "「リセットコード」が記載されたメールが届きます。ここにコードを入力し、新しいパスワードを入力します。" -#: src/view/com/auth/create/Step2.tsx:43 +#: src/view/com/auth/create/Step2.tsx:58 msgid "Your account" msgstr "あなたのアカウント" -#: src/view/com/auth/create/Step2.tsx:122 +#: src/view/com/auth/create/Step2.tsx:146 msgid "Your birth date" msgstr "生年月日" @@ -2434,8 +2490,8 @@ msgid "Your hosting provider" msgstr "ホスティングプロバイダー" #: src/view/screens/Settings.tsx:402 -#: src/view/shell/desktop/RightNav.tsx:129 -#: src/view/shell/Drawer.tsx:636 +#: src/view/shell/desktop/RightNav.tsx:137 +#: src/view/shell/Drawer.tsx:655 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "アプリパスワードを使用してログインすると、招待コードは非表示になります。" diff --git a/src/logger/index.ts b/src/logger/index.ts index dd0380f6ed..d6d8d9fc1d 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 ec64bf4bd2..563b12aa46 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 0000000000..c7deb21ccb --- /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 f4f7be240d..150fc1fe33 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 f689c3d063..cdb542f5ac 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -108,6 +108,7 @@ export function transform(legacy: Partial): 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 5ed8e01f34..27b1f26bdd 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 @@ -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 0000000000..11119ce758 --- /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( + persisted.defaults.hiddenPosts, +) +const apiContext = React.createContext({ + 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 ( + + {children} + + ) +} + +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 1f4348cfc2..5ec659031e 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 ( - {children} + + {children} + ) } diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts index fe207371d0..785e297652 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 c9d81bc170..7a55b4e186 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([ FOLLOWING_FEED_STUB, ]) + const [isLoading, setLoading] = React.useState(true) const {data: preferences} = usePreferencesQuery() const hasPinnedCustom = React.useMemo(() => { @@ -249,6 +251,7 @@ export function usePinnedFeedsInfos(): { // these requests can fail, need to filter those out try { return await queryClient.fetchQuery({ + staleTime: STALE.SECONDS.FIFTEEN, queryKey: feedSourceInfoQueryKey({uri}), queryFn: async () => { const type = getFeedTypeFromUri(uri) @@ -283,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 a189f20e42..abaabbf0e7 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 cc59431632..411a0f791d 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> { const uris = new Set() 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 b91af372f0..0e943622a4 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 872bb21af2..a9aa7f26e2 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/state/session/index.tsx b/src/state/session/index.tsx index 7cdbe6bb80..aa8c94ebcd 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -189,6 +189,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { }, logger.DebugContext.session, ) + track('Try Create Account') const agent = new BskyAgent({service}) @@ -231,6 +232,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { }, logger.DebugContext.session, ) + track('Create Account') }, [upsertAccount, queryClient], ) diff --git a/src/view/com/auth/LoggedOut.tsx b/src/view/com/auth/LoggedOut.tsx index b0b2bf7edc..c0427ff542 100644 --- a/src/view/com/auth/LoggedOut.tsx +++ b/src/view/com/auth/LoggedOut.tsx @@ -3,8 +3,9 @@ import {View, Pressable} from 'react-native' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {useLingui} from '@lingui/react' import {msg} from '@lingui/macro' +import {useNavigation} from '@react-navigation/native' -import {isIOS} from 'platform/detection' +import {isIOS, isNative} from 'platform/detection' import {Login} from 'view/com/auth/login/Login' import {CreateAccount} from 'view/com/auth/create/CreateAccount' import {ErrorBoundary} from 'view/com/util/ErrorBoundary' @@ -18,6 +19,9 @@ import { useLoggedOutView, useLoggedOutViewControls, } from '#/state/shell/logged-out' +import {useSession} from '#/state/session' +import {Text} from '#/view/com/util/text/Text' +import {NavigationProp} from 'lib/routes/types' enum ScreenState { S_LoginOrCreateAccount, @@ -26,6 +30,7 @@ enum ScreenState { } export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { + const {hasSession} = useSession() const {_} = useLingui() const pal = usePalette('default') const setMinimalShellMode = useSetMinimalShellMode() @@ -40,6 +45,8 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { ) const {isMobile} = useWebMediaQueries() const {clearRequestedAccount} = useLoggedOutViewControls() + const navigation = useNavigation() + const isFirstScreen = screenState === ScreenState.S_LoginOrCreateAccount React.useEffect(() => { screen('Login') @@ -53,6 +60,10 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { clearRequestedAccount() }, [clearRequestedAccount, onDismiss]) + const onPressSearch = React.useCallback(() => { + navigation.navigate(`SearchTab`) + }, [navigation]) + return ( void}) { }, ]}> - {onDismiss && ( + {onDismiss ? ( void}) { }} /> - )} + ) : isNative && !hasSession && isFirstScreen ? ( + + + Search{' '} + + + + ) : null} {screenState === ScreenState.S_LoginOrCreateAccount ? ( void}) { - const {track, screen} = useAnalytics() + const {screen} = useAnalytics() const pal = usePalette('default') const {_} = useLingui() const [uiState, uiDispatch] = useCreateAccount() @@ -38,6 +38,7 @@ export function CreateAccount({onPressBack}: {onPressBack: () => void}) { const {createAccount} = useSessionApi() const {mutate: setBirthDate} = usePreferencesSetBirthDateMutation() const {mutate: setSavedFeeds} = useSetSaveFeedsMutation() + const {isTabletOrDesktop} = useWebMediaQueries() React.useEffect(() => { screen('CreateAccount') @@ -93,21 +94,17 @@ export function CreateAccount({onPressBack}: {onPressBack: () => void}) { uiDispatch, _, }) - track('Create Account') setBirthDate({birthDate: uiState.birthDate}) if (IS_PROD(uiState.serviceUrl)) { setSavedFeeds(DEFAULT_PROD_FEEDS) } } catch { // dont need to handle here - } finally { - track('Try Create Account') } } }, [ uiState, uiDispatch, - track, onboardingDispatch, createAccount, setBirthDate, @@ -124,64 +121,62 @@ export function CreateAccount({onPressBack}: {onPressBack: () => void}) { title={_(msg`Create Account`)} description={_(msg`We're so excited to have you join us!`)}> - - - {uiState.step === 1 && ( - - )} - {uiState.step === 2 && ( - - )} - {uiState.step === 3 && ( - - )} - - + + {uiState.step === 1 && ( + + )} + {uiState.step === 2 && ( + + )} + {uiState.step === 3 && ( + + )} + + + + + Back + + + + {uiState.canNext ? ( - - Back + {uiState.isProcessing ? ( + + ) : ( + + Next + + )} + + ) : serviceInfoError ? ( + refetchServiceInfo()} + accessibilityRole="button" + accessibilityLabel={_(msg`Retry`)} + accessibilityHint="" + accessibilityLiveRegion="polite"> + + Retry - - {uiState.canNext ? ( - - {uiState.isProcessing ? ( - - ) : ( - - Next - - )} - - ) : serviceInfoError ? ( - refetchServiceInfo()} - accessibilityRole="button" - accessibilityLabel={_(msg`Retry`)} - accessibilityHint="" - accessibilityLiveRegion="polite"> - - Retry - - - ) : serviceInfoIsFetching ? ( - <> - - - Connecting... - - - ) : undefined} - - - + ) : serviceInfoIsFetching ? ( + <> + + + Connecting... + + + ) : undefined} + + ) diff --git a/src/view/com/auth/create/Step2.tsx b/src/view/com/auth/create/Step2.tsx index 89fd070ad1..8b143ff37c 100644 --- a/src/view/com/auth/create/Step2.tsx +++ b/src/view/com/auth/create/Step2.tsx @@ -13,6 +13,17 @@ import {isWeb} from 'platform/detection' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useModalControls} from '#/state/modals' +import {logger} from '#/logger' + +function sanitizeDate(date: Date): Date { + if (!date || date.toString() === 'Invalid Date') { + logger.error(`Create account: handled invalid date for birthDate`, { + hasDate: !!date, + }) + return new Date() + } + return date +} /** STEP 2: Your account * @field Invite code or waitlist @@ -38,6 +49,10 @@ export function Step2({ openModal({name: 'waitlist'}) }, [openModal]) + const birthDate = React.useMemo(() => { + return sanitizeDate(uiState.birthDate) + }, [uiState.birthDate]) + return ( @@ -56,6 +71,9 @@ export function Step2({ onChange={value => uiDispatch({type: 'set-invite-code', value})} accessibilityLabel={_(msg`Invite code`)} accessibilityHint="Input invite code to proceed" + autoCapitalize="none" + autoComplete="off" + autoCorrect={false} /> )} @@ -90,6 +108,9 @@ export function Step2({ accessibilityLabel={_(msg`Email`)} accessibilityHint="Input email for Bluesky waitlist" accessibilityLabelledBy="email" + autoCapitalize="none" + autoComplete="off" + autoCorrect={false} /> @@ -111,6 +132,9 @@ export function Step2({ accessibilityLabel={_(msg`Password`)} accessibilityHint="Set password" accessibilityLabelledBy="password" + autoCapitalize="none" + autoComplete="off" + autoCorrect={false} /> @@ -122,8 +146,9 @@ export function Step2({ Your birth date uiDispatch({type: 'set-birth-date', value})} buttonType="default-light" buttonStyle={[pal.border, styles.dateInputButton]} diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts index 4df82f8fcb..a77d2a44fe 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/auth/login/LoginForm.tsx b/src/view/com/auth/login/LoginForm.tsx index a39d0d9bfe..727a0e9456 100644 --- a/src/view/com/auth/login/LoginForm.tsx +++ b/src/view/com/auth/login/LoginForm.tsx @@ -174,6 +174,7 @@ export const LoginForm = ({ autoCorrect={false} autoComplete="username" returnKeyType="next" + textContentType="username" onSubmitEditing={() => { passwordInputRef.current?.focus() }} diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index c4453e0c3e..9f60923d61 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}`}> - Add link card: + Add link card:{' '} {toShortUrl(url)} @@ -452,7 +456,7 @@ export const ComposePost = observer(function ComposePost({ ) : null} - {isDesktop ? : null} + {!isMobile ? : null} diff --git a/src/view/com/composer/text-input/TextInput.tsx b/src/view/com/composer/text-input/TextInput.tsx index 13fe3a0b31..7e39f6aedf 100644 --- a/src/view/com/composer/text-input/TextInput.tsx +++ b/src/view/com/composer/text-input/TextInput.tsx @@ -215,7 +215,13 @@ export const TextInput = forwardRef(function TextInputImpl( autoFocus={true} allowFontScaling multiline - style={[pal.text, styles.textInput, styles.textInputFormatting]} + numberOfLines={4} + style={[ + pal.text, + styles.textInput, + styles.textInputFormatting, + {textAlignVertical: 'top'}, + ]} {...props}> {textDecorated} diff --git a/src/view/com/composer/text-input/web/Autocomplete.tsx b/src/view/com/composer/text-input/web/Autocomplete.tsx index 1f74125617..51197b8e4d 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( 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 09a2dcf41b..f4b2d99b05 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} /> @@ -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 ff65055011..8665fbfacf 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={ - - } + 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/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx index ea740ec912..003ad61ba6 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx @@ -320,6 +320,7 @@ const ImageItem = ({ accessibilityLabel={imageSrc.alt} accessibilityHint="" onLoad={() => setIsLoaded(true)} + cachePolicy="memory" /> diff --git a/src/view/com/lists/ListMembers.tsx b/src/view/com/lists/ListMembers.tsx index a31ca47936..932f4b512f 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={ - - } + 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 586ad234e9..a2a6b06511 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 ( - - {items.length > 0 && ( - (item.uri ? item.uri : item._reactKey)} - renderItem={renderItemInner} - refreshControl={ - - } - contentContainerStyle={[s.contentContainer]} - removeClippedSubviews={true} - // @ts-ignore our .web version only -prf - desktopFixedHeight - /> - )} - - ) + if (inline) { + return ( + + {items.length > 0 && ( + (item.uri ? item.uri : item._reactKey)} + renderItem={renderItemInner} + refreshControl={ + + } + contentContainerStyle={[s.contentContainer]} + removeClippedSubviews={true} + // @ts-ignore our .web version only -prf + desktopFixedHeight + /> + )} + + ) + } else { + return ( + + {items.length > 0 && ( + (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 + /> + )} + + ) + } } const styles = StyleSheet.create({ diff --git a/src/view/com/lists/ProfileLists.tsx b/src/view/com/lists/ProfileLists.tsx index e3d9bd0b43..db981717f1 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( data={items} keyExtractor={(item: any) => item._reactKey} renderItem={renderItemInner} - refreshControl={ - - } + 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 80130f43ad..a2e9183179 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/AppealLabel.tsx b/src/view/com/modals/AppealLabel.tsx index 2db070bc63..edc6f4cd01 100644 --- a/src/view/com/modals/AppealLabel.tsx +++ b/src/view/com/modals/AppealLabel.tsx @@ -62,17 +62,17 @@ export function Component(props: ReportComponentProps) { - Appeal Decision + Appeal Content Warning { if (isModalActive) { - bottomSheetRef.current?.expand() + bottomSheetRef.current?.snapToIndex(0) } else { bottomSheetRef.current?.close() } diff --git a/src/view/com/modals/Threadgate.tsx b/src/view/com/modals/Threadgate.tsx index 9d78a2e6dc..0deef185b5 100644 --- a/src/view/com/modals/Threadgate.tsx +++ b/src/view/com/modals/Threadgate.tsx @@ -69,7 +69,7 @@ export function Component({ - Choose "Everybody" or "Nobody" + Choose "Everybody" or "Nobody" - Or combine these options: + Or combine these options: - Back + {' '} + Back diff --git a/src/view/com/modals/report/Modal.tsx b/src/view/com/modals/report/Modal.tsx index 60c3f06b77..afd0d417dc 100644 --- a/src/view/com/modals/report/Modal.tsx +++ b/src/view/com/modals/report/Modal.tsx @@ -44,9 +44,9 @@ export function Component(content: ReportComponentProps) { const {isMobile} = useWebMediaQueries() const [isProcessing, setIsProcessing] = useState(false) const [showDetailsInput, setShowDetailsInput] = useState(false) - const [error, setError] = useState() - const [issue, setIssue] = useState() - const [details, setDetails] = useState() + const [error, setError] = useState('') + const [issue, setIssue] = useState('') + const [details, setDetails] = useState('') const isAccountReport = 'did' in content const subjectKey = isAccountReport ? content.did : content.uri const atUri = useMemo( diff --git a/src/view/com/notifications/Feed.tsx b/src/view/com/notifications/Feed.tsx index 52d534c4fd..a99fe2c1dd 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={ - - } + 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 aaa2ea2c63..24b7e4fb6b 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 } @@ -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' ? ( ) : null} + {item.type === 'feedgen-like' && item.subjectUri ? ( + + ) : null} ) @@ -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 245ba59e8c..6e013f6115 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}) { item.actor.did} - refreshControl={ - - } + 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 5cc0063885..a2d3be5583 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}) { item.did} - refreshControl={ - - } + 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 9175508847..6cd1f35519 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={ - - } + 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 e6adfc85b5..986fd70b2e 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' @@ -42,7 +42,6 @@ import {useComposerControls} from '#/state/shell/composer' import {useModerationOpts} from '#/state/queries/preferences' import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' import {ThreadPost} from '#/state/queries/post-thread' -import {LabelInfo} from '../util/moderation/LabelInfo' import {useSession} from '#/state/session' import {WhoCanReply} from '../threadgate/WhoCanReply' @@ -187,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,6 +334,9 @@ let PostThreadItemLoaded = ({ postCid={post.cid} postUri={post.uri} record={record} + showAppealLabelItem={ + post.author.did === currentAccount?.did && isModeratedPost + } style={{ paddingVertical: 6, paddingHorizontal: 10, @@ -354,13 +356,6 @@ let PostThreadItemLoaded = ({ includeMute style={styles.alert} /> - {post.author.did === currentAccount?.did && !isSelfLabeledPost ? ( - - ) : null} {richText?.text ? ( 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={ - - } + 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 20d1997456..942d7bf713 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} /> - + @@ -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 c5b2dc528a..ef95f59248 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 077dabe53a..fd8dee173e 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}) { item.did} - refreshControl={ - - } + 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 5265ee07ea..091922dd90 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}) { item.did} - refreshControl={ - - } + refreshing={isPTRing} + onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} diff --git a/src/view/com/util/BlurView.android.tsx b/src/view/com/util/BlurView.android.tsx new file mode 100644 index 0000000000..eee1d9d867 --- /dev/null +++ b/src/view/com/util/BlurView.android.tsx @@ -0,0 +1,30 @@ +import React from 'react' +import {StyleSheet, View, ViewProps} from 'react-native' +import {addStyle} from 'lib/styles' + +type BlurViewProps = ViewProps & { + blurType?: 'dark' | 'light' + blurAmount?: number +} + +export const BlurView = ({ + style, + blurType, + ...props +}: React.PropsWithChildren) => { + if (blurType === 'dark') { + style = addStyle(style, styles.dark) + } else { + style = addStyle(style, styles.light) + } + return +} + +const styles = StyleSheet.create({ + dark: { + backgroundColor: '#0008', + }, + light: { + backgroundColor: '#fff8', + }, +}) diff --git a/src/view/com/util/Html.tsx b/src/view/com/util/Html.tsx index 1590955a23..2e47194811 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 {children} } @@ -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 {children} } @@ -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 {children} } @@ -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 {children} } diff --git a/src/view/com/util/List.tsx b/src/view/com/util/List.tsx index 5947fe87a1..9abd7d35a6 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 = Omit< FlatListProps, - '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 const SCROLLED_DOWN_LIMIT = 200 function ListImpl( - {onScrolledDownChange, ...props}: ListProps, + { + onScrolledDownChange, + refreshing, + onRefresh, + headerOffset, + style, + ...props + }: ListProps, ref: React.Ref, ) { const isScrolledDown = useSharedValue(false) const contextScrollHandlers = useScrollHandlers() + const pal = usePalette('default') function handleScrolledDownChange(didScrollDown: boolean) { startTransition(() => { @@ -49,11 +64,36 @@ function ListImpl( }, }) + let refreshControl + if (refreshing !== undefined || onRefresh !== undefined) { + refreshControl = ( + + ) + } + + let contentOffset + if (headerOffset != null) { + style = addStyle(style, { + paddingTop: headerOffset, + }) + contentOffset = {x: 0, y: headerOffset * -1} + } + return ( ) diff --git a/src/view/com/util/PostMeta.tsx b/src/view/com/util/PostMeta.tsx index eef7094cd7..b9c3842b35 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 @@ -41,7 +43,7 @@ let PostMeta = (opts: PostMetaOpts): React.ReactNode => { )} diff --git a/src/view/com/util/forms/DateInput.tsx b/src/view/com/util/forms/DateInput.tsx index 4aa5cb6106..c5f0afc8fc 100644 --- a/src/view/com/util/forms/DateInput.tsx +++ b/src/view/com/util/forms/DateInput.tsx @@ -13,6 +13,9 @@ import {Text} from '../text/Text' import {TypographyVariant} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext' import {usePalette} from 'lib/hooks/usePalette' +import {getLocales} from 'expo-localization' + +const LOCALE = getLocales()[0] interface Props { testID?: string @@ -25,6 +28,7 @@ interface Props { accessibilityLabel: string accessibilityHint: string accessibilityLabelledBy?: string + handleAsUTC?: boolean } export function DateInput(props: Props) { @@ -32,6 +36,12 @@ export function DateInput(props: Props) { const theme = useTheme() const pal = usePalette('default') + const formatter = React.useMemo(() => { + return new Intl.DateTimeFormat(LOCALE.languageTag, { + timeZone: props.handleAsUTC ? 'UTC' : undefined, + }) + }, [props.handleAsUTC]) + const onChangeInternal = useCallback( (event: DateTimePickerEvent, date: Date | undefined) => { setShow(false) @@ -64,7 +74,7 @@ export function DateInput(props: Props) { - {props.value.toLocaleDateString()} + {formatter.format(props.value)} @@ -73,6 +83,7 @@ export function DateInput(props: Props) { +export const DropdownMenuItem = (props: ItemProps & {testID?: string}) => { + const theme = useTheme() + const [focused, setFocused] = React.useState(false) + const backgroundColor = theme.colorScheme === 'dark' ? '#fff1' : '#0001' + + return ( + { + 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) { + 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(null) + const menuRef = React.useRef(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 ( + setOpen(o)}> + e.preventDefault()}> + } + testID={testID} + accessibilityRole="button" + accessibilityLabel={accessibilityLabel} + accessibilityHint={accessibilityHint} + onPress={() => setOpen(o => !o)} + hitSlop={HITSLOP_10}> + {children} + + + + + + {items.map((item, index) => { + if (item.label === 'separator') { + return ( + + ) + } + if (index > 1 && items[index - 1].label === 'separator') { + return ( + + + + {item.label} + + {item.icon && ( + + )} + + + ) + } + return ( + + + {item.label} + + {item.icon && ( + + )} + + ) + })} + + + + ) +} + +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 8c4b03dd93..1f2e067c2a 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' @@ -31,6 +32,7 @@ let PostDropdownBtn = ({ postUri, record, style, + showAppealLabelItem, }: { testID: string postAuthor: AppBskyActorDefs.ProfileViewBasic @@ -38,6 +40,7 @@ let PostDropdownBtn = ({ postUri: string record: AppBskyFeedPost.Record style?: StyleProp + showAppealLabelItem?: boolean }): React.ReactNode => { const {hasSession, currentAccount} = useSession() const theme = useTheme() @@ -48,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) @@ -96,6 +102,10 @@ let PostDropdownBtn = ({ Linking.openURL(translatorUrl) }, [translatorUrl]) + const onHidePost = React.useCallback(() => { + hidePost({uri: postUri}) + }, [postUri, hidePost]) + const dropdownItems: NativeDropdownItem[] = [ { label: _(msg`Translate`), @@ -157,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', }, @@ -198,6 +229,23 @@ let PostDropdownBtn = ({ web: ['far', 'trash-can'], }, }, + showAppealLabelItem && { + label: 'separator', + }, + showAppealLabelItem && { + label: _(msg`Appeal content warning`), + onPress() { + openModal({name: 'appeal-label', uri: postUri, cid: postCid}) + }, + testID: 'postDropdownAppealBtn', + icon: { + ios: { + name: 'exclamationmark.triangle', + }, + android: 'ic_menu_report_image', + web: 'circle-exclamation', + }, + }, ].filter(Boolean) as NativeDropdownItem[] return ( diff --git a/src/view/com/util/forms/SearchInput.tsx b/src/view/com/util/forms/SearchInput.tsx index 02b462b55d..a88046d4c2 100644 --- a/src/view/com/util/forms/SearchInput.tsx +++ b/src/view/com/util/forms/SearchInput.tsx @@ -11,6 +11,7 @@ import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' +import {HITSLOP_10} from 'lib/constants' import {MagnifyingGlassIcon} from 'lib/icons' import {useTheme} from 'lib/ThemeContext' import {usePalette} from 'lib/hooks/usePalette' @@ -71,7 +72,8 @@ export function SearchInput({ onPress={onPressCancelSearchInner} accessibilityRole="button" accessibilityLabel={_(msg`Clear search query`)} - accessibilityHint=""> + accessibilityHint="" + hitSlop={HITSLOP_10}> record: AppBskyFeedPost.Record + showAppealLabelItem?: boolean style?: StyleProp 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 d5bb38fb2e..27aa804d35 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 ( - {link.thumb ? ( + {link.thumb && !embedPlayerParams ? ( - {imageChild} ) : undefined} + {embedPlayerParams && ( + + )} void +}) { + // If the player is active and not loading, we don't want to show the overlay. + if (isPlayerActive && !isLoading) return null + + return ( + + + {!isPlayerActive ? ( + + ) : ( + + )} + + + ) +} + +// 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 ( + + + {isNative && params.type === 'youtube_video' ? ( + + ) : ( + + + + )} + + + ) +} + +// 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() + + 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(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 ( + + {link.thumb && (!isPlayerActive || isLoading) && ( + + )} + + + + + ) +} + +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 2f2da5662a..0000000000 --- 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 -}) => { - const pal = usePalette('default') - - const imageChild = ( - - - - ) - - return ( - - - - ) -} - -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 2814cad878..c94ce9684d 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 - } return ( - - - + + + + + ) } diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx index d2d0aafb8f..dbdb6d9ca4 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,18 +487,15 @@ export function FeedsScreen(_props: Props) { keyExtractor={item => item.key} contentContainerStyle={styles.contentContainer} renderItem={renderItem} - refreshControl={ - - } + refreshing={isPTR} + onRefresh={isUserSearching ? undefined : onPullToRefresh} initialNumToRender={10} onEndReached={onEndReached} // @ts-ignore our .web version only -prf desktopFixedHeight + scrollIndicatorInsets={{right: 1}} + keyboardShouldPersistTaps="handled" + keyboardDismissMode="on-drag" /> {hasSession && ( diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index bfe4402653..b8033f0b45 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -12,15 +12,19 @@ import {FeedPage} from 'view/com/feeds/FeedPage' import {HomeLoggedOutCTA} from '../com/auth/HomeLoggedOutCTA' import {useSetMinimalShellMode, useSetDrawerSwipeDisabled} from '#/state/shell' import {usePreferencesQuery} from '#/state/queries/preferences' +import {usePinnedFeedsInfos, FeedSourceInfo} from '#/state/queries/feed' import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' 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 export function HomeScreen(props: Props) { const {data: preferences} = usePreferencesQuery() + const {feeds: pinnedFeeds, isLoading: isPinnedFeedsLoading} = + usePinnedFeedsInfos() const {isDesktop} = useWebMediaQueries() const [initialPage, setInitialPage] = React.useState( undefined, @@ -39,11 +43,17 @@ export function HomeScreen(props: Props) { loadLastActivePage() }, []) - if (preferences && initialPage !== undefined) { + if ( + preferences && + pinnedFeeds && + initialPage !== undefined && + !isPinnedFeedsLoading + ) { return ( ) @@ -58,9 +68,11 @@ export function HomeScreen(props: Props) { function HomeScreenReady({ preferences, + pinnedFeeds, initialPage, }: Props & { preferences: UsePreferencesQueryResponse + pinnedFeeds: FeedSourceInfo[] initialPage: string }) { const {hasSession} = useSession() @@ -82,9 +94,9 @@ function HomeScreenReady({ }, [preferences.feeds.pinned, selectedPage]) const customFeeds = React.useMemo(() => { - const pinned = preferences.feeds.pinned + const pinned = pinnedFeeds const feeds: FeedDescriptor[] = [] - for (const uri of pinned) { + for (const {uri} of pinned) { if (uri.includes('app.bsky.feed.generator')) { feeds.push(`feedgen|${uri}`) } else if (uri.includes('app.bsky.graph.list')) { @@ -92,7 +104,7 @@ function HomeScreenReady({ } } return feeds - }, [preferences.feeds.pinned]) + }, [pinnedFeeds]) const homeFeedParams = React.useMemo(() => { return { @@ -167,7 +179,7 @@ function HomeScreenReady({ ) return ( diff --git a/src/view/screens/ModerationMutedAccounts.tsx b/src/view/screens/ModerationMutedAccounts.tsx index 41aee9f2ff..67118e530e 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 e28a67e370..6e2f183056 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 fe17be5e80..20ef729236 100644 --- a/src/view/screens/PreferencesHomeFeed.tsx +++ b/src/view/screens/PreferencesHomeFeed.tsx @@ -117,7 +117,7 @@ export function PreferencesHomeFeed({navigation}: Props) { setFeedViewPref({ diff --git a/src/view/screens/PreferencesThreads.tsx b/src/view/screens/PreferencesThreads.tsx index 73d9419326..35a010b55d 100644 --- a/src/view/screens/PreferencesThreads.tsx +++ b/src/view/screens/PreferencesThreads.tsx @@ -75,10 +75,16 @@ export function PreferencesThreads({navigation}: Props) { setThreadViewPrefs({sort: key})} initialSelection={preferences?.threadViewPrefs?.sort} @@ -97,7 +103,7 @@ export function PreferencesThreads({navigation}: Props) { setThreadViewPrefs({ @@ -120,7 +126,7 @@ export function PreferencesThreads({navigation}: Props) { setThreadViewPrefs({ diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index f1c648a672..4558ae33d5 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 cde39a33f4..211306c0d0 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( 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( scrollToTop: onScrollToTop, })) + React.useEffect(() => { + if (!isScreenFocused) { + return + } + return listenSoftReset(onScrollToTop) + }, [onScrollToTop, isScreenFocused]) + const renderPostsEmpty = useCallback(() => { return }, []) diff --git a/src/view/screens/ProfileList.tsx b/src/view/screens/ProfileList.tsx index 2db768cc57..c51758ae51 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( 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( scrollToTop: onScrollToTop, })) + React.useEffect(() => { + if (!isScreenFocused) { + return + } + return listenSoftReset(onScrollToTop) + }, [onScrollToTop, isScreenFocused]) + const renderPostsEmpty = useCallback(() => { return }, []) diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index efd8507a7e..da3a82a4d3 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, @@ -163,6 +162,8 @@ function SearchScreenSuggestedFollows() { // @ts-ignore web only -prf desktopFixedHeight contentContainerStyle={{paddingBottom: 1200}} + keyboardShouldPersistTaps="handled" + keyboardDismissMode="on-drag" /> ) : ( @@ -185,7 +186,6 @@ type SearchResultSlice = function SearchScreenPostResults({query}: {query: string}) { const {_} = useLingui() - const pal = usePalette('default') const [isPTR, setIsPTR] = React.useState(false) const { isFetched, @@ -214,12 +214,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 +259,8 @@ function SearchScreenPostResults({query}: {query: string}) { } }} keyExtractor={item => item.key} - refreshControl={ - - } + refreshing={isPTR} + onRefresh={onPullToRefresh} onEndReached={onEndReached} // @ts-ignore web only -prf desktopFixedHeight @@ -306,7 +305,13 @@ function SearchScreenUserResults({query}: {query: string}) { const SECTIONS_LOGGEDOUT = ['Users'] const SECTIONS_LOGGEDIN = ['Posts', 'Users'] -export function SearchScreenInner({query}: {query?: string}) { +export function SearchScreenInner({ + query, + primarySearch, +}: { + query?: string + primarySearch?: boolean +}) { const pal = usePalette('default') const setMinimalShellMode = useSetMinimalShellMode() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() @@ -416,7 +421,7 @@ export function SearchScreenInner({query}: {query?: string}) { style={pal.textLight} /> - {isDesktop ? ( + {isDesktop && !primarySearch ? ( Find users with the search tool on the right ) : ( Find users on Bluesky @@ -428,19 +433,7 @@ export function SearchScreenInner({query}: {query?: string}) { ) } -export function SearchScreenDesktop( - props: NativeStackScreenProps, -) { - const {isDesktop} = useWebMediaQueries() - - return isDesktop ? ( - - ) : ( - - ) -} - -export function SearchScreenMobile( +export function SearchScreen( props: NativeStackScreenProps, ) { const theme = useTheme() @@ -452,7 +445,7 @@ export function SearchScreenMobile( const moderationOpts = useModerationOpts() const search = useActorAutocompleteFn() const setMinimalShellMode = useSetMinimalShellMode() - const {isTablet} = useWebMediaQueries() + const {isTabletOrDesktop, isTabletOrMobile} = useWebMediaQueries() const searchDebounceTimeout = React.useRef( undefined, @@ -527,17 +520,29 @@ export function SearchScreenMobile( return ( - - - - + + {isTabletOrMobile && ( + + + + )} + accessibilityHint="" + hitSlop={HITSLOP_10}> - + Cancel @@ -601,7 +610,12 @@ export function SearchScreenMobile( {isFetching ? ( ) : ( - + {searchResults.length ? ( searchResults.map((item, i) => ( - ·   +   ·   + + + + + diff --git a/src/view/shell/Drawer.tsx b/src/view/shell/Drawer.tsx index e5d2a38639..14bc6af261 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() const {track} = useAnalytics() @@ -244,6 +246,23 @@ let DrawerContent = ({}: {}): React.ReactNode => { )} + + + + + + + diff --git a/src/view/shell/createNativeStackNavigatorWithAuth.tsx b/src/view/shell/createNativeStackNavigatorWithAuth.tsx index 43dc281590..9fea6e49f1 100644 --- a/src/view/shell/createNativeStackNavigatorWithAuth.tsx +++ b/src/view/shell/createNativeStackNavigatorWithAuth.tsx @@ -124,6 +124,7 @@ function NativeStackNavigator({ }, } } + return ( - + )} diff --git a/src/view/shell/desktop/Feeds.tsx b/src/view/shell/desktop/Feeds.tsx index ff51ffe22e..a8f5f1c66e 100644 --- a/src/view/shell/desktop/Feeds.tsx +++ b/src/view/shell/desktop/Feeds.tsx @@ -21,7 +21,7 @@ export function DesktopFeeds() { }) return ( - + {feeds .filter(f => f.displayName !== 'Following') @@ -86,11 +86,10 @@ function FeedItem({ const styles = StyleSheet.create({ container: { flex: 1, + // @ts-ignore web only -prf overflowY: 'auto', width: 300, paddingHorizontal: 12, paddingVertical: 18, - borderTopWidth: 1, - borderBottomWidth: 1, }, }) diff --git a/src/view/shell/desktop/LeftNav.tsx b/src/view/shell/desktop/LeftNav.tsx index df6cb64999..3925b51808 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 @@ -238,24 +239,26 @@ function ComposeBtn() { return null } return ( - - - - - - New Post - - + + + + + + + New Post + + + ) } @@ -511,6 +514,9 @@ const styles = StyleSheet.create({ fontSize: 14, }, + newPostBtnContainer: { + flexDirection: 'row', + }, newPostBtn: { flexDirection: 'row', alignItems: 'center', diff --git a/src/view/shell/desktop/RightNav.tsx b/src/view/shell/desktop/RightNav.tsx index 8d9961a5fa..02b742dc94 100644 --- a/src/view/shell/desktop/RightNav.tsx +++ b/src/view/shell/desktop/RightNav.tsx @@ -16,7 +16,7 @@ import {Plural, Trans, msg, plural} from '@lingui/macro' import {useSession} from '#/state/session' import {useInviteCodesQuery} from '#/state/queries/invites' -export function DesktopRightNav() { +export function DesktopRightNav({routeName}: {routeName: string}) { const pal = usePalette('default') const palError = usePalette('error') const {_} = useLingui() @@ -30,12 +30,20 @@ export function DesktopRightNav() { return ( - - - {hasSession && ( - + {routeName === 'Search' ? ( + + ) : ( + <> + + + {hasSession && ( + + + + )} + )} =2.3.1" wonka "^4.0.14" +"@web3-storage/multipart-parser@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" + integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== + "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" @@ -7448,7 +7860,7 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@zxing/text-encoding@^0.9.0": +"@zxing/text-encoding@0.9.0", "@zxing/text-encoding@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== @@ -7566,6 +7978,16 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" +ajv@8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -7693,16 +8115,16 @@ arg@4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== +arg@5.0.2, arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -7916,7 +8338,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^3.2.2, async@^3.2.3: +async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== @@ -8018,7 +8440,7 @@ babel-jest@^27.4.2, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@^29.2.1, babel-jest@^29.4.2, babel-jest@^29.6.3: +babel-jest@^29.2.1: version "29.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.3.tgz#e62f6c38f3ec8c147244168ee18ef0b919f10348" integrity sha512-1Ne93zZZEy5XmTa4Q+W5+zxBrDpExX8E3iy+xJJ+24ewlfo/T3qHfQJCzi/MMVFmBQDNxtRR/Gfd2dwb/0yrQw== @@ -8031,6 +8453,19 @@ babel-jest@^29.2.1, babel-jest@^29.4.2, babel-jest@^29.6.3: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-loader@^8.2.3, babel-loader@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" @@ -8174,19 +8609,35 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-expo@~9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz#5ed1756c8434ca972d7a940e4f13570a283641df" - integrity sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ== +babel-preset-expo@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-10.0.0.tgz#f70aeefc05fe8548db83c1125005ef81970b1731" + integrity sha512-oSTKPG5jCTGA6m+j0qUam8ICM+1zRI1IFZ0UgVWzWPs0l7tkM39pwCP/1WE3QiHVl0jhAuskMJrV7ax86VpnEw== dependencies: "@babel/plugin-proposal-decorators" "^7.12.9" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-parameters" "^7.22.15" "@babel/preset-env" "^7.20.0" - babel-plugin-module-resolver "^5.0.0" + "@babel/preset-react" "^7.22.15" + "@react-native/babel-preset" "^0.73.18" babel-plugin-react-native-web "~0.18.10" - metro-react-native-babel-preset "0.76.8" + react-refresh "0.14.0" + +babel-preset-expo@~10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-10.0.1.tgz#a0e7ad0119f46e58cb3f0738c3ca0c6e97b69c11" + integrity sha512-uWIGmLfbP3dS5+8nesxaW6mQs41d4iP7X82ZwRdisB/wAhKQmuJM9Y1jQe4006uNYkw6Phf2TT03ykLVro7KuQ== + dependencies: + "@babel/plugin-proposal-decorators" "^7.12.9" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/preset-env" "^7.20.0" + "@babel/preset-react" "^7.22.15" + "@react-native/babel-preset" "^0.73.18" + babel-plugin-react-native-web "~0.18.10" + react-refresh "0.14.0" babel-preset-fbjs@^3.4.0: version "3.4.0" @@ -8274,7 +8725,7 @@ base-64@0.1.0, base-64@^0.1.0: resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== -base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.0.2, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -8378,24 +8829,6 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -body-parser@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - bonjour-service@^1.0.11: version "1.1.1" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" @@ -8819,11 +9252,33 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chrome-launcher@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" + integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +chromium-edge-launcher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz#0443083074715a13c669530b35df7bfea33b1509" + integrity sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + mkdirp "^1.0.4" + rimraf "^3.0.2" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -9086,11 +9541,6 @@ commander@^9.4.1: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -9106,11 +9556,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compare-versions@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - component-type@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" @@ -9168,7 +9613,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4, content-type@~1.0.5: +content-type@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -9188,11 +9633,21 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.1.tgz#790dea2cce64638c7ae04d9fabed193bd7ccf3b4" + integrity sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw== + cookie@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-webpack-plugin@^10.2.0: version "10.2.4" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe" @@ -9277,6 +9732,19 @@ cosmiconfig@^8.0.0: parse-json "^5.2.0" path-type "^4.0.0" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -9570,6 +10038,11 @@ dash-get@^1.0.2: resolved "https://registry.yarnpkg.com/dash-get/-/dash-get-1.0.2.tgz#4c9e9ad5ef04c4bf9d3c9a451f6f7997298dcc7c" integrity sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ== +data-uri-to-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -9774,25 +10247,20 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -deprecated-react-native-prop-types@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.1.0.tgz#8ed03a64c21b7fbdd2d000957b6838d4f38d2c66" - integrity sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw== +deprecated-react-native-prop-types@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz#02a12f090da7bd9e8c3ac53c31cf786a1315d302" + integrity sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ== dependencies: - "@react-native/normalize-colors" "*" - invariant "*" - prop-types "*" + "@react-native/normalize-colors" "^0.73.0" + invariant "^2.2.4" + prop-types "^15.8.1" dequal@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.0.tgz#41c6065e70de738541c82cdbedea5292277a017e" integrity sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw== -dequal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.1.tgz#dbbf9795ec626e9da8bd68782f4add1d23700d8b" - integrity sha512-Fx8jxibzkJX2aJgyfSdLhr9tlRoTnHKrRJuu2XHlAgKioN2j19/Bcbe0d4mFXYZ3+wpE2KVobUVTfDutcD17xQ== - dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -10213,7 +10681,12 @@ env-editor@^0.4.1: resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== -envinfo@^7.7.2, envinfo@^7.7.3: +envinfo@^7.10.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" + integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== + +envinfo@^7.7.3: version "7.10.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== @@ -10433,16 +10906,16 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -10886,7 +11359,7 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -expect@^29.0.0, expect@^29.6.3: +expect@^29.0.0: version "29.6.3" resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.3.tgz#e74b57c35a81fd93ece6b570e371309c53dc4f54" integrity sha512-x1vY4LlEMWUYVZQrFi4ZANXFwqYbJ/JNQspLVvzhW2BNY28aNcXMQH6imBbt+RBf5sVRTodYHXtSP/TLEU0Dxw== @@ -10897,194 +11370,220 @@ expect@^29.0.0, expect@^29.6.3: jest-message-util "^29.6.3" jest-util "^29.6.3" -expo-application@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.3.0.tgz#0811f2de69a3a7f521762fd7f8a0a4563276dada" - integrity sha512-XLkaELwmiXW6JjFVkwuiFQaGZoNKAxNAcSJkFdz8s4rCljEwehylbzoPk37QHw3cxqb4v0/2EICtg4C4kpEVCA== - -expo-asset@~8.10.1: - version "8.10.1" - resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.10.1.tgz#a7e8cf1c555ab8f844599822cb084fee95a93644" - integrity sha512-5VMTESxgY9GBsspO/esY25SKEa7RyascVkLe/OcL1WgblNFm7xCCEEUIW8VWS1nHJQGYxpMZPr3bEfjMpdWdyA== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +expo-application@~5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.8.0.tgz#b82cb98a08f91d61f047f6578e883e0deb9661f2" + integrity sha512-nNQ/ayC4P1ue0ZQSmUlG/K2ZHTPwHyYGsb0QtEmCFUCitsjPKIx4coNvAreZMuELvY7pD1zKr+pdtN/ULnljBA== + +expo-application@~5.8.1: + version "5.8.1" + resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.8.1.tgz#9a8628514a6dbe06d8104ce9e2712977fdbd9589" + integrity sha512-8BRbB69HDjDQ7zwurqZ5/nKp3sN7DLXXjYEvakjf6LaEXwn16V4ClqCxb2KRAeKoWX3ORwKnvqM8F5uz9tfM9A== + +expo-asset@~9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-9.0.1.tgz#85f3affa263a97d012d585819e742218bdb967c6" + integrity sha512-hoCzQ8ga6ZOmkwABQeAIStXmshpK+1oNpGNNeJCJ1QdoU6hlCu6DKnikreLZYr6FQzaQTS3yel86zuRQtwNpaQ== + dependencies: + "@react-native/assets-registry" "~0.73.1" blueimp-md5 "^2.10.0" - expo-constants "~14.4.2" - expo-file-system "~15.4.0" + expo-constants "~15.4.0" + expo-file-system "~16.0.0" invariant "^2.2.4" md5-file "^3.2.3" - path-browserify "^1.0.0" - url-parse "^1.5.9" -expo-build-properties@~0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.8.3.tgz#fbfa156e9619bebda71c66af9a26ebc3490b2365" - integrity sha512-kEDDuAadHqJTkvCGK4fXYHVrePiJO1DjyW95AicmwuGwQvGJydYFbuoauf9ybAU+4UH4arhbce8gHI3ZpIj3Jw== +expo-build-properties@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.11.0.tgz#523e242b5db2f26b9fd397dcf2c841824aed348c" + integrity sha512-14+UjV4uKCI5KsOw/BTL++T3N1OPWnOvLGoF39/o9XjB4t0wqXoSrcEl6ZbtH/b3xzd6dj9pnDDBLWDn/7uKvQ== dependencies: ajv "^8.11.0" semver "^7.5.3" -expo-camera@13.5.1: - version "13.5.1" - resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-13.5.1.tgz#f91b02e85d7dc5c530da931f892807696e3ef5e3" - integrity sha512-NbIx9Z7OqXPB1R3FymfLDoJQnsJeCVs6FztWC9ndCox8JF9iCjiqIzTo7258gdyIFCSJDJOZvrjMOV0CL7IaUA== +expo-camera@~14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-14.0.1.tgz#d3567566e5f9c1a906b3ec8f66fde1e4c08fc99d" + integrity sha512-72W8T9P+oYloWwFt2/ils15OS5X0R9u1p5vjRRo5fyGhbTA3qkS8UsV1tdSNTCUBcAxXHEXTO+iM4Xzabun8tg== dependencies: - "@koale/useworker" "^4.0.2" invariant "^2.2.4" -expo-constants@~14.4.2: - version "14.4.2" - resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.4.2.tgz#cac5e8b524069545739b8d8595ce96cc5be6578c" - integrity sha512-nOB122DOAjk+KrJT69lFQAoYVQGQjFHSigCPVBzVdko9S1xGsfiOH9+X5dygTsZTIlVLpQJDdmZ7ONiv3i+26w== +expo-constants@~15.4.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-15.4.1.tgz#f76f347cf687b6630e1e3b9a385a4e42771671a4" + integrity sha512-aLAN7HOMRFQ5dVduDLPxSlAhsA5OubDxFeM1uo3CHQoaXZfxyJv6g64zjLsOBzVSEIRmNQZl7+1mc5rujZDU2w== dependencies: - "@expo/config" "~8.1.0" - uuid "^3.3.2" + "@expo/config" "~8.5.0" -expo-dev-client@2.4.7: - version "2.4.7" - resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-2.4.7.tgz#c0d4e96768c0b74615dbab15f54420b4e21ecc19" - integrity sha512-K+xlUHilHg8v6pMEWp87VgnBj34xgsoLJawOWdo4BrbWnpA8ZIiNvX7bx75bT2VuM4jjGabbYPpT8BnHcuo+xA== +expo-constants@~15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-15.4.2.tgz#e62201d973b9c5bf0686169f77604058597fa425" + integrity sha512-goJ44MsjRkJQbi/w49n7HIsBnp7Caa4mPMDUgTwk07BCUM5yKPb3Ny2/0QsaUcqBNgke2IXxr4OhqDYLd1jWOQ== dependencies: - expo-dev-launcher "2.4.9" - expo-dev-menu "3.1.9" - expo-dev-menu-interface "1.3.0" - expo-manifests "~0.7.0" - expo-updates-interface "~0.10.0" + "@expo/config" "~8.5.0" -expo-dev-launcher@2.4.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-2.4.9.tgz#5e56b1d8e5e792b8f6d38f3767c220224a2c977d" - integrity sha512-R4pwcHEYFkm38lgbyHm8+PW/FcKtohpq6YkN0jb95lzJOOUH+G9qPZpnS3oicC8UgfY/S+aUuLbyHcPzMusbWg== +expo-dev-client@~3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-3.3.4.tgz#5c57252023bc5ea5fc0bdd8be1562181b3f535d6" + integrity sha512-6BmxIqxYmJ7YGUehIRoi07mNWNBg+9LcY89zcitCQkYcTBKZwBwAuMyO6QNtTku9Y/XvbntbRNYGoNNuL7rpAw== dependencies: - expo-dev-menu "3.1.9" + expo-dev-launcher "3.6.1" + expo-dev-menu "4.5.2" + expo-dev-menu-interface "1.7.1" + expo-manifests "~0.13.0" + expo-updates-interface "~0.15.1" + +expo-dev-launcher@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-3.6.1.tgz#93c37ecf71f9f76e7eb0157a480ced6b627512b2" + integrity sha512-ZT2yzACz/jl+pQ9/abIPNevs9t659//mlHO/kuFF6Z5IaLyVhp69SgU+2xBq0/TIBl+76PinCLTBtCVMkbNcNw== + dependencies: + ajv "8.11.0" + expo-dev-menu "4.5.2" + expo-manifests "~0.13.0" resolve-from "^5.0.0" semver "^7.5.3" -expo-dev-menu-interface@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.3.0.tgz#51b6be8c6e0ce73e414ac7a545998dfad0dfdb80" - integrity sha512-WtRP7trQ2lizJJTTFXUSGGn1deIeHaYej0sUynvu/uC69VrSP4EeSnYOxbmEO29kuT/MsQBMGu0P/AkMQOqCOg== +expo-dev-menu-interface@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.7.1.tgz#de48913b0e338671a31dd69bbcf1772e8f2d3439" + integrity sha512-EHerVdLGMhcmlT+4lugzALBzoexLj1KJMakQm5lDvBPWGBwAJ1Tu4frkD1e+XbTun+9zpVhbshMoPqPb6F0Qig== -expo-dev-menu@3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-3.1.9.tgz#407a3e36a3d4b90eaf3d8d12cb7c1e9cc3a8b414" - integrity sha512-mLi8LFyLZ/l2Z0SHz+RnfUKWMGGJ5C0B3HpqFybpcjZHJkHvS0QvUyXqBqqCyWsz/E+W8nnLuAuC4/9+BTunVg== +expo-dev-menu@4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-4.5.2.tgz#4c5b242e195330c94839d3741dcc41b842cc1eba" + integrity sha512-Nkbz8ROkAAOXQquvVr7yuv556Vj7E9fGB00mtU+x8OIWVSQi0nVorHYS12oKUDoLNDpA8ayKOwfcroIovAsVSw== dependencies: - expo-dev-menu-interface "1.3.0" + expo-dev-menu-interface "1.7.1" semver "^7.5.3" -expo-device@~5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/expo-device/-/expo-device-5.4.0.tgz#4dc4db4b2265d1f5c9d7c2be6548c375882be437" - integrity sha512-TQxSVPrC6njCbzZ9Cqpc1lGLIjPmO1zBIbqW7CTqBPD1dOIMrgQvt7lZZhkHh3pWzoZznH283sSYqCvy3XcURw== +expo-device@~5.9.1: + version "5.9.1" + resolved "https://registry.yarnpkg.com/expo-device/-/expo-device-5.9.1.tgz#6e0e8688238677c4bc2ab6ca2296a3efd466777d" + integrity sha512-1cFwKj3i+uIZ8YDmMy0inTVs/5d8sobzpiGmPMLxGaspBdTvGHezTD5wzmDKGAdgBiXUgoP/enuF/p+O0oihhA== dependencies: ua-parser-js "^0.7.33" -expo-eas-client@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/expo-eas-client/-/expo-eas-client-0.6.0.tgz#b722dde0de1b8b56701b282a5fdf28d3d3e79ec4" - integrity sha512-FSPy0ThcJBvzEzOZVhpOrYyHgQ8U1jJ4v7u7tr1x0KOVRqyf25APEQZFxxRPn3zAYW0tQ+uDTCbrwNymFqhQfw== +expo-eas-client@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/expo-eas-client/-/expo-eas-client-0.11.0.tgz#0f25aa497849cade7ebef55c0631093a87e58b07" + integrity sha512-99W0MUGe3U4/MY1E9UeJ4uKNI39mN8/sOGA0Le8XC47MTbwbLoVegHR3C5y2fXLwLn7EpfNxAn5nlxYjY3gD2A== -expo-file-system@~15.4.0, expo-file-system@~15.4.3: - version "15.4.3" - resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.4.3.tgz#0cb2464c6e663ad8e8a742d5c538ed8ff1013b11" - integrity sha512-HaaCBTUATs2+i7T4jxIvoU9rViAHMvOD2eBaJ1H7xPHlwZlMORjQs7bsNKonR/TQoduxZBJLVZGawvaAJNCH8g== - dependencies: - uuid "^3.4.0" +expo-file-system@~16.0.0: + version "16.0.1" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-16.0.1.tgz#326b7c2f6e53e1a0eaafc9769578aafb3f9c9f43" + integrity sha512-/U6ufN2wRPgg4m2a9sqbL3dThqQsysT022qulEXWnUTmNaqnzYSk9ihjDWqoqjXLi9slQLsyok5t6CNzhM7HPw== -expo-font@~11.4.0: - version "11.4.0" - resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-11.4.0.tgz#e2d31c0bb76ba3c37c2d84703a49aeafc3afef28" - integrity sha512-nkmezCFD7gR/I6R+e3/ry18uEfF8uYrr6h+PdBJu+3dawoLOpo+wFb/RG9bHUekU1/cPanR58LR7G5MEMKHR2w== +expo-file-system@~16.0.2: + version "16.0.2" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-16.0.2.tgz#c0f482dd0bea59ea6331abf46ec319bf2ac9e110" + integrity sha512-oqiM3aq4mGugdv6DRH0wjrULWdZFm4EMLgKmR24on/f9ZCDG9VB3waSy+9J3XaDTAXBaB9ta82ACnNzk8KPdMw== + +expo-font@~11.10.0: + version "11.10.0" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-11.10.0.tgz#03bd0ad998f0295008572672f35e8018a84ea692" + integrity sha512-yqlsoOKWiYv8aBMFqheHSUKKEY/lrB7zHjzDc60OF1xGa1q8kh7mKQVwSaRMS0G77GEUvvk8Vb/uKw51KY1kGA== dependencies: fontfaceobserver "^2.1.0" -expo-image-loader@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.4.0.tgz#35909516311aa60fa4bf35aa6eb7624d7f7f788d" - integrity sha512-dq88tiRB8aB1U+O/oJI7IY4VU9Nu2iDjEwR8QDfLtD4xWd5lNGoyic5Vh7911E1qNJFqNMSVIVzOD5l1SQ3A6g== +expo-image-loader@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.6.0.tgz#ca7d4fdf53125bff2091d3a2c34a3155f10df147" + integrity sha512-RHQTDak7/KyhWUxikn2yNzXL7i2cs16cMp6gEAgkHOjVhoCJQoOJ0Ljrt4cKQ3IowxgCuOrAgSUzGkqs7omj8Q== -expo-image-manipulator@~11.5.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-11.5.0.tgz#2a0f4c069dc25722c2c8f0e15c0c42353f1115a4" - integrity sha512-W/mwSIuLyolDDSzIkENvwVoQpe6HJfpcAQbeu3VX3ZcTJrgvORM/tfuCJacCTHQ0iVIB49Txv65CgbtO+3Pd6w== +expo-image-manipulator@^11.8.0: + version "11.8.0" + resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-11.8.0.tgz#e52351728619e534c949ae4b394af2c7c5d16702" + integrity sha512-ZWVrHnYmwJq6h7auk+ropsxcNi+LyZcPFKQc8oy+JA0SaJosfShvkCm7RADWAunHmfPCmjHrhwPGEu/rs7WG/A== dependencies: - expo-image-loader "~4.4.0" + expo-image-loader "~4.6.0" -expo-image-picker@~14.5.0: - version "14.5.0" - resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-14.5.0.tgz#fdc14c74ad338a6a630f8fc5c81e642d6bea343c" - integrity sha512-9icvfQuWMdNKufFqu+FxenKcfybz9ior+XYQCIl/q5+mpHPo2tKq8I30vu2BjsOJ0Cfo7V4vMeN7a9F/3ooUfQ== +expo-image-picker@~14.7.1: + version "14.7.1" + resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-14.7.1.tgz#c51faff3a3fbffc6ae93d7155370beb1a2d2baea" + integrity sha512-ILQVOJgI3aEzrDmCFGDPtpAepYkn8mot8G7vfQ51BfFdQbzL6N3Wm1fS/ofdWlAZJl/qT2DwaIh5xYmf3SyGZA== dependencies: - expo-image-loader "~4.4.0" + expo-image-loader "~4.6.0" -expo-image@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-1.3.2.tgz#e5051cc728af1d57f5dc1c0d783e7c1dfb6aa8a0" - integrity sha512-5Dm6kPfAOptMpQSJZDaA1M+AGjRJT0b1eLjtWLLpf6Z7gG1SMAFPUNUKaQV4p9H57psqvloDNb5nPIjSdIA1HQ== +expo-image@~1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-1.10.1.tgz#5d9850f5ae39019eae36b255e62e53134bd4aca5" + integrity sha512-NwJt2FS6sZXeP92RpsZxBKSnCPWMdcJ2Q2bXHc8WgOkLLInvRd0yBKAzEusXTZ6+N+RqAcWVojlh3EBbSQhkiA== + dependencies: + "@react-native/assets-registry" "~0.73.1" -expo-json-utils@~0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.7.1.tgz#efe315c982113204be46419cbc26d4d9a2af145f" - integrity sha512-L0lyH8diXQtV0q5BLbFlcoxTqPF5im79xDHPhybB0j36xYdm65hjwRJ4yMrPIN5lR18hj48FUZeONiDHRyEvIg== +expo-json-utils@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.12.0.tgz#15ad797e9518a6a47eae9b95599e6373e641f8f2" + integrity sha512-xsUsPUZcXZWoT4RY3FhEPYGYvr2iThMNNU5drdmkC/vmkePvqy5kK4aIqlIKzQboXxj7k1dXoNSSLg5mKy8uKg== -expo-keep-awake@~12.3.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz#c42449ae19c993274ddc43aafa618792b6aec408" - integrity sha512-ujiJg1p9EdCOYS05jh5PtUrfiZnK0yyLy+UewzqrjUqIT8eAGMQbkfOn3C3fHE7AKd5AefSMzJnS3lYZcZYHDw== +expo-keep-awake@~12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-12.8.0.tgz#c70b6b3a04ecedb3117cd334fe74be846c5a879b" + integrity sha512-KMk9nnOEEI2w4aYr/PMnLT6ryXwmHfsb/baeHX/RSLNBZ4a5JVkNXP+mT66UNnYfXxy3pABruusd7KjeKW+F0A== -expo-localization@~14.3.0: - version "14.3.0" - resolved "https://registry.yarnpkg.com/expo-localization/-/expo-localization-14.3.0.tgz#a7614114079658000f46c7e3029703c8508e0678" - integrity sha512-TML3TeVtwpfuSNwbhBspC9XsGJaa0TWJNh+UaR/35YP9fQiaJfVWUMSrAq84ba6rY1Pm3kti07LV8UUa505oqg== +expo-localization@~14.8.1: + version "14.8.1" + resolved "https://registry.yarnpkg.com/expo-localization/-/expo-localization-14.8.1.tgz#e36cdb13d366f462a9a89c8014ed146d00284adf" + integrity sha512-0Gv7qhgl4HVxXd1omaKPLOUDPw0D9rXnyrptGav2HVbFmAr1334CJKWfRBmW9XhMDknEUhOnh3F3WDPb/6SkLg== dependencies: rtl-detect "^1.0.2" -expo-manifests@~0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/expo-manifests/-/expo-manifests-0.7.2.tgz#77c2d9476e8130fc9ca6d4274fa1a5495d34358e" - integrity sha512-xlhL0XI2zw3foJ0q2Ra4ieBhU0V2yz+Rv6GpVEaaIHFlIC/Dbx+mKrX5dgenZEMERr/MG7sRJaRbAVB2PaAYhA== +expo-manifests@~0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/expo-manifests/-/expo-manifests-0.13.0.tgz#20f163f84a414c6c50b8079e5fd0685d7c5b8ce2" + integrity sha512-N3adl3edSga3jdatLXjXiltdSwQkB1rOI5uyGEE5OwR/bpxc/5OUgHdRZjJgY6jJmVY4BCAiw0RXFoVRBbgE0Q== dependencies: - expo-json-utils "~0.7.0" + "@expo/config" "~8.5.0" + expo-json-utils "~0.12.0" -expo-media-library@~15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/expo-media-library/-/expo-media-library-15.4.1.tgz#577efb13d912e28e9c3fcc5022156e204a59b7e8" - integrity sha512-lpWcT4pynWcE7TyNMUkLFH4YcueCTnq7UOJYRR0vewPEJeQXwRscka7zBtrhA+RSsJda013Q0615K+5lRLt14Q== +expo-media-library@~15.9.1: + version "15.9.1" + resolved "https://registry.yarnpkg.com/expo-media-library/-/expo-media-library-15.9.1.tgz#1eaf5a0c8f51669f6f86d385a8fa411226042216" + integrity sha512-Y29uKFJ3qWwNejIrjoCppXp3OgIFs/RYHWXkF9xey6evpNrUlHoP1WHG2jYAMSrss6aIRVt3tO7EtYUCZxz50Q== -expo-modules-autolinking@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz#363f90c172769ce12bf56c7be9ca0897adfc7a81" - integrity sha512-yt5a1VCp2BF9CrsO689PCD5oXKP14MMhnOanQMvDn4BDpURYfzAlDVGC5fZrNQKtwn/eq3bcrxIwZ7D9QjVVRg== +expo-modules-autolinking@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.9.0.tgz#5bb11b5e2013b46888c2124d90cbd89f8ee6d91b" + integrity sha512-FVRuclmR7w6FZRXZmTwPdIr9PNCP7FUWMhpzaxbKU/xm7DbNw5ORAv2gaM8t9OaMxYjIAMSNYi0NnmLIinzBKA== dependencies: - "@expo/config" "~8.1.0" + "@expo/config" "~8.5.0" chalk "^4.1.0" commander "^7.2.0" fast-glob "^3.2.5" find-up "^5.0.0" fs-extra "^9.1.0" -expo-modules-core@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.5.10.tgz#b829ef0c65208870555d604d4602bfe84d0e8bb7" - integrity sha512-+m+poHkhjAhRZmngSLUpJJoxhjoExYKSr4J5luy4N+YMlowK31Zewztg4xsPrNRoPvGK/B5uCm0UEzIQvLsNGg== +expo-modules-core@1.11.4: + version "1.11.4" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.11.4.tgz#9b5cadc389b4df917a68c931344030bc8297b8af" + integrity sha512-MeDvWvdI3cHJO2VsASXsNYVoou1sdEO/SGBdLh2lxRhNpCLB0IIEZ3uPZwQQ8WBfFyPk4QT7M3XhCdPCKaT21A== dependencies: - compare-versions "^3.4.0" invariant "^2.2.4" -expo-notifications@~0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.20.1.tgz#55479e3bbde31ab5ccf6f6fd3ed288c6c91101d2" - integrity sha512-Y4Y8IWYj/cSWCP/P167z3GRg//5ZlsznfMXi4ABdWOOpF0RGNpd5N17TxioNivtt7tMhZ/o1vmzFxulhy0nBWg== +expo-notifications@~0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.27.2.tgz#06e25b20a44ed95be9f64cd01844d52c03ae12db" + integrity sha512-Pp54ek92hkRgNN4k6kH6TUhf18ZQeM5LQ54KyPFHu5IllwcmuniuVYhVIq4hx152OUyf/hBONncxBFuVJ/CMQg== dependencies: - "@expo/image-utils" "^0.3.18" + "@expo/image-utils" "^0.4.0" "@ide/backoff" "^1.0.0" abort-controller "^3.0.0" assert "^2.0.0" badgin "^1.1.5" - expo-application "~5.3.0" - expo-constants "~14.4.2" + expo-application "~5.8.0" + expo-constants "~15.4.0" fs-extra "^9.1.0" - uuid "^3.4.0" expo-pwa@0.0.127: version "0.0.127" @@ -11096,83 +11595,85 @@ expo-pwa@0.0.127: commander "2.20.0" update-check "1.5.3" -expo-sharing@~11.5.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/expo-sharing/-/expo-sharing-11.5.0.tgz#a8cad65874d882b7f75b12856b4ef55ea9b60a2d" - integrity sha512-uerM5YH1FKDZXfkP9ORebvlMVOPP/AfoYgYBez6a8G9fztNYHnRCA6mgK+3aQmpnb3ltmjnAZC39kH18bTNcVw== +expo-sharing@^11.10.0: + version "11.10.0" + resolved "https://registry.yarnpkg.com/expo-sharing/-/expo-sharing-11.10.0.tgz#0e85197ee4d2634b00fe201e571fbdc64cf83eef" + integrity sha512-/64RyyKlZ25WfnMXa87HbPXhIIqWwNbIku/RaIYAq4SE0XTRC+KTH3v0XFkfDa+SCG/jKsAr1pJ3vQvsNo1sCQ== -expo-splash-screen@~0.20.5: - version "0.20.5" - resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.20.5.tgz#ebeba3e3977606830f74f506ab2cc25042bb7efd" - integrity sha512-nTALYdjHpeEA30rdOWSguxn72ctv8WM8ptuUgpfRgsWyn4i6rwYds/rBXisX69XO5fg+XjHAQqijGx/b28+3tg== +expo-splash-screen@~0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.26.1.tgz#702e0e0163af24defb5f0f076165fe613e1af79b" + integrity sha512-cPxQq1iJbhc1r7WN8QyIs4ISKQOPn5HamJUatcq82jPoZUBrzg1Ofa/55Ivnbi1z2GmQHg6vU/TQZ2cc6cjzbQ== dependencies: - "@expo/prebuild-config" "6.2.6" + "@expo/prebuild-config" "6.7.2" -expo-status-bar@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.6.0.tgz#e79ffdb9a84d2e0ec9a0dc7392d9ab364fefa9cf" - integrity sha512-e//Oi2WPdomMlMDD3skE4+1ZarKCJ/suvcB4Jo/nO427niKug5oppcPNYO+csR6y3ZglGuypS+3pp/hJ+Xp6fQ== +expo-status-bar@~1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.11.1.tgz#a11318741d361048c11db2b16c4364a79a74af30" + integrity sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg== -expo-structured-headers@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/expo-structured-headers/-/expo-structured-headers-3.3.0.tgz#9f0b041a1d243a22a4a23d9eb19f02ace3c5258c" - integrity sha512-t+h5Zqaukd3Tn97LaWPpibVsmiC/TFP8F+8sAUliwCSMzgcb5TATRs2NcAB+JcIr8EP3JJDyYXJrZle1cjs4mQ== +expo-structured-headers@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/expo-structured-headers/-/expo-structured-headers-3.7.0.tgz#69b752cf43515535eccd30513da428688634a7ec" + integrity sha512-uGcU65gzP4trfmVtntAg3rU/pytTGpCUXN+hQmCwCCvQb9qK1aoCXvVlqlW5zP8SZ04tzF1WXKR+P8RSEn5rSw== -expo-system-ui@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-2.4.0.tgz#bf809172726cf661ab4f526129eb427bb5f6e4d4" - integrity sha512-uaBAYeQtFzyE8WVcch2V3G243xvOf7vJkLzrIJ3rJ8NA3uZRmxF0lMMe75oMrAaLVXyr1Z+ZE6UZwh7x49FuIg== +expo-system-ui@~2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-2.9.2.tgz#f6af7df366f38e31564c49a68cffd94c917459b6" + integrity sha512-oq0JfOKELproQsM0QTv0kTka1ThQhSJY2xfYX/ej+9vbKXrvAXbqsB/ErpO06qUFz6oJU9EzSAtFvnz8qCx2jw== dependencies: "@react-native/normalize-color" "^2.0.0" debug "^4.3.2" -expo-updates-interface@~0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-0.10.1.tgz#cab075641cd381718ccd9264bf133dc393430a44" - integrity sha512-I6JMR7EgjXwckrydDmrkBEX/iw750dcqpzQVsjznYWfi0HTEOxajLHB90fBFqQkUV5i5s4Fd3hYQ1Cn0oMzUbA== +expo-task-manager@~11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/expo-task-manager/-/expo-task-manager-11.7.0.tgz#3e87a3c3d941a60d3c4447d837b3ae95be7dcb4b" + integrity sha512-P5pmN3rQgDaIeLyEFMXixuimeRR4IDDU6nDo1kv/Y2JQrgpNKeOHjTbRdzd6iPOeqIa+/3k3tAooU8VYp534tA== + dependencies: + unimodules-app-loader "~4.5.0" -expo-updates@~0.18.12: - version "0.18.12" - resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.18.12.tgz#ac96b674c2c7cf0f5ec57f6b4e0aca3ae9211b5f" - integrity sha512-oJlAVJd/SiQNnNGha+OILc/QA5z6qfrrT2W/eGWWI9POxTka0Z0Obyi/jTkruh72J6wtWbtto65DLJKS93RzdA== +expo-updates-interface@~0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-0.15.1.tgz#b0242fa7ba05768ada2f0faf83b90aa8b8fa65d7" + integrity sha512-B42oOB0pw4TaPoOGE/yzt9ggwNNxo3PEJRU0kIOurQ8hW5UEUC8cAbGQDYWGbTyNGp8gLBG+T2MCg+YYaCYJUw== + +expo-updates@~0.24.5: + version "0.24.5" + resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.24.5.tgz#4fb88863a8be35ef6d4dd33d64c0050fa67a4244" + integrity sha512-mTimcPq8RCtiOv828nCgzgsXuph0hywll3XTnZywGHrrWtdKg7rZ5xGN8h+Yd2nKyMOUtymnZBk99Q9T1xrgoQ== dependencies: "@expo/code-signing-certificates" "0.0.5" - "@expo/config" "~8.1.0" - "@expo/config-plugins" "~7.2.0" + "@expo/config" "~8.5.0" + "@expo/config-plugins" "~7.8.0" arg "4.1.0" chalk "^4.1.2" - expo-eas-client "~0.6.0" - expo-manifests "~0.7.0" - expo-structured-headers "~3.3.0" - expo-updates-interface "~0.10.0" + expo-eas-client "~0.11.0" + expo-manifests "~0.13.0" + expo-structured-headers "~3.7.0" + expo-updates-interface "~0.15.1" fbemitter "^3.0.0" resolve-from "^5.0.0" -expo@^49.0.8: - version "49.0.8" - resolved "https://registry.yarnpkg.com/expo/-/expo-49.0.8.tgz#97e2ffcf239326898a3b803394e069f7df7a381e" - integrity sha512-lkTRwMvJP8j7KAHJB+aZqI9dH1hw7j2QE1X9Okpcf+t0deGqH36XqkjUCcU6KYgCOjSnt8fvRm89TJR5Oq0ElA== +expo@^50.0.0-preview.7: + version "50.0.0-preview.7" + resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.0-preview.7.tgz#d4ac7a9aad0a5e9f03a31b8794e186a1af741edc" + integrity sha512-FyoEJVf42Tr1On0IFa0dL7Qs9gnl252ah3e0B8FsU96G7Hi93cDz5Rcn81ezRiO6YIF4nFV3+bh6BHsm/nsA0A== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.10.11" - "@expo/config" "8.1.2" - "@expo/config-plugins" "7.2.5" + "@expo/cli" "0.16.5" + "@expo/config" "8.5.2" + "@expo/config-plugins" "7.8.2" + "@expo/metro-config" "0.17.1" "@expo/vector-icons" "^13.0.0" - babel-preset-expo "~9.5.2" - expo-application "~5.3.0" - expo-asset "~8.10.1" - expo-constants "~14.4.2" - expo-file-system "~15.4.3" - expo-font "~11.4.0" - expo-keep-awake "~12.3.0" - expo-modules-autolinking "1.5.1" - expo-modules-core "1.5.10" + babel-preset-expo "~10.0.1" + expo-asset "~9.0.1" + expo-file-system "~16.0.2" + expo-font "~11.10.0" + expo-keep-awake "~12.8.0" + expo-modules-autolinking "1.9.0" + expo-modules-core "1.11.4" fbemitter "^3.0.0" - invariant "^2.2.4" - md5-file "^3.2.3" - node-fetch "^2.6.7" - pretty-format "^26.5.2" - uuid "^3.4.0" + whatwg-url-without-unicode "8.0.0-3" express-async-errors@^3.1.1: version "3.1.1" @@ -11319,6 +11820,13 @@ fast-xml-parser@^4.0.12: dependencies: strnum "^1.0.5" +fast-xml-parser@^4.2.4: + version "4.3.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz#761e641260706d6e13251c4ef8e3f5694d4b0d79" + integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg== + dependencies: + strnum "^1.0.5" + fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -11551,10 +12059,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -flow-enums-runtime@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz#95884bfcc82edaf27eef7e1dd09732331cfbafbc" - integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== +flow-enums-runtime@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787" + integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: version "0.215.0" @@ -11878,7 +12386,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -12088,17 +12596,29 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hermes-estree@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.12.0.tgz#8a289f9aee854854422345e6995a48613bac2ca8" - integrity sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw== +hermes-estree@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" + integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== -hermes-parser@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.12.0.tgz#114dc26697cfb41a6302c215b859b74224383773" - integrity sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw== +hermes-estree@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.17.1.tgz#902806a900c185720424ffcf958027821d23c051" + integrity sha512-EdUJms+eRE40OQxysFlPr1mPpvUbbMi7uDAKlScBw8o3tQY22BZ5yx56OYyp1bVaBm+7Cjc3NQz24sJEFXkPxg== + +hermes-parser@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.15.0.tgz#f611a297c2a2dbbfbce8af8543242254f604c382" + integrity sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q== dependencies: - hermes-estree "0.12.0" + hermes-estree "0.15.0" + +hermes-parser@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.17.1.tgz#8b5cbaff235fed28487812ad718f9c7182d0db0f" + integrity sha512-yErtFLMEL6490fFJPurNn23OI2ciGAtaUfKUg9VPdcde9CmItCjOVQkJt1Xzawv5kuRzeIx0RE2E2Q9TbIgdzA== + dependencies: + hermes-estree "0.17.1" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -12501,7 +13021,7 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -invariant@*, invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -13033,13 +13553,13 @@ jest-changed-files@^27.5.1: execa "^5.0.0" throat "^6.0.1" -jest-changed-files@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.6.3.tgz#97cfdc93f74fb8af2a1acb0b78f836f1fb40c449" - integrity sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" - jest-util "^29.6.3" + jest-util "^29.7.0" p-limit "^3.1.0" jest-circus@^27.5.1: @@ -13067,28 +13587,28 @@ jest-circus@^27.5.1: stack-utils "^2.0.3" throat "^6.0.1" -jest-circus@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.3.tgz#c5ac37758bb9e78fd78ebd655ed1d28b220d6fd3" - integrity sha512-p0R5YqZEMnOpHqHLWRSjm2z/0p6RNsrNE/GRRT3eli8QGOAozj6Ys/3Tv+Ej+IfltJoSPwcQ6/hOCRkNlxLLCw== +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: - "@jest/environment" "^29.6.3" - "@jest/expect" "^29.6.3" - "@jest/test-result" "^29.6.3" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.6.3" - jest-matcher-utils "^29.6.3" - jest-message-util "^29.6.3" - jest-runtime "^29.6.3" - jest-snapshot "^29.6.3" - jest-util "^29.6.3" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" p-limit "^3.1.0" - pretty-format "^29.6.3" + pretty-format "^29.7.0" pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" @@ -13111,22 +13631,21 @@ jest-cli@^27.5.1: prompts "^2.0.1" yargs "^16.2.0" -jest-cli@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.3.tgz#1e6520106e9d7443a481ebe07ffed46e1568a51f" - integrity sha512-KuPdXUPXQIf0t6DvmG8MV4QyhcjR1a6ruKl3YL7aGn/AQ8JkROwFkWzEpDIpt11Qy188dHbRm8WjwMsV/4nmnQ== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^29.6.3" - "@jest/test-result" "^29.6.3" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.6.3" - jest-util "^29.6.3" - jest-validate "^29.6.3" - prompts "^2.0.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" yargs "^17.3.1" jest-config@^27.5.1: @@ -13159,31 +13678,31 @@ jest-config@^27.5.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-config@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.3.tgz#2d1490005a28291806022f7f95ec3debf55eaaf7" - integrity sha512-nb9bOq2aEqogbyL4F9mLkAeQGAgNt7Uz6U59YtQDIxFPiL7Ejgq0YIrp78oyEHD6H4CIV/k7mFrK7eFDzUJ69w== +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.6.3" + "@jest/test-sequencer" "^29.7.0" "@jest/types" "^29.6.3" - babel-jest "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.6.3" - jest-environment-node "^29.6.3" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" jest-get-type "^29.6.3" jest-regex-util "^29.6.3" - jest-resolve "^29.6.3" - jest-runner "^29.6.3" - jest-util "^29.6.3" - jest-validate "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.6.3" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -13207,6 +13726,16 @@ jest-diff@^29.0.1, jest-diff@^29.6.3: jest-get-type "^29.6.3" pretty-format "^29.6.3" +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-docblock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" @@ -13214,10 +13743,10 @@ jest-docblock@^27.5.1: dependencies: detect-newline "^3.0.0" -jest-docblock@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.6.3.tgz#293dca5188846c9f7c0c2b1bb33e5b11f21645f2" - integrity sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" @@ -13232,16 +13761,16 @@ jest-each@^27.5.1: jest-util "^27.5.1" pretty-format "^27.5.1" -jest-each@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.3.tgz#1956f14f5f0cb8ae0b2e7cabc10bb03ec817c142" - integrity sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: "@jest/types" "^29.6.3" chalk "^4.0.0" jest-get-type "^29.6.3" - jest-util "^29.6.3" - pretty-format "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" jest-environment-jsdom@^27.5.1: version "27.5.1" @@ -13282,7 +13811,7 @@ jest-environment-node@^27.5.1: jest-mock "^27.5.1" jest-util "^27.5.1" -jest-environment-node@^29.2.1, jest-environment-node@^29.6.3: +jest-environment-node@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.3.tgz#72217a00db2c26755406241c70ad73c334917e28" integrity sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew== @@ -13294,12 +13823,25 @@ jest-environment-node@^29.2.1, jest-environment-node@^29.6.3: jest-mock "^29.6.3" jest-util "^29.6.3" -jest-expo@^49.0.0: - version "49.0.0" - resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-49.0.0.tgz#d1c91ddb1303f8666de47d45ba52174bff6fb241" - integrity sha512-nglYg6QPYSqCsrsOFiGosQi+m1rrqmYluPbFXNnXNEOrB2MvxMOgQJeWfMHDExHMX1ymLWX+7y8mYo6XVJpBJQ== +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: - "@expo/config" "~8.1.0" + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-expo@^50.0.1: + version "50.0.1" + resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-50.0.1.tgz#4b180b2a06a2cad49c5c74cf8cbbd4387bb30621" + integrity sha512-osvA63UDLJ/v7MG9UHjU7WJ0oZ0Krq9UhXxm2s6rdOlnt85ARocyMU57RC0T0yzPN47C9Ref45sEeOIxoV4Mzg== + dependencies: + "@expo/config" "~8.5.0" + "@expo/json-file" "^8.2.37" "@jest/create-cache-key-function" "^29.2.1" babel-jest "^29.2.1" find-up "^5.0.0" @@ -13309,6 +13851,7 @@ jest-expo@^49.0.0: json5 "^2.2.3" lodash "^4.17.19" react-test-renderer "18.2.0" + stacktrace-js "^2.0.2" jest-get-type@^27.5.1: version "27.5.1" @@ -13359,6 +13902,25 @@ jest-haste-map@^29.6.3: optionalDependencies: fsevents "^2.3.2" +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-jasmine2@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" @@ -13400,13 +13962,13 @@ jest-leak-detector@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-leak-detector@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz#b9661bc3aec8874e59aff361fa0c6d7cd507ea01" - integrity sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: jest-get-type "^29.6.3" - pretty-format "^29.6.3" + pretty-format "^29.7.0" jest-matcher-utils@^27.5.1: version "27.5.1" @@ -13428,6 +13990,16 @@ jest-matcher-utils@^29.0.1, jest-matcher-utils@^29.6.3: jest-get-type "^29.6.3" pretty-format "^29.6.3" +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-message-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" @@ -13473,6 +14045,21 @@ jest-message-util@^29.6.3: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" @@ -13490,12 +14077,21 @@ jest-mock@^29.6.3: "@types/node" "*" jest-util "^29.6.3" +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.0.6, jest-regex-util@^27.5.1: +jest-regex-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== @@ -13519,13 +14115,13 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve-dependencies@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.3.tgz#fc58ac08f9ed992b10d5cfb0bbb1d89b98508ff3" - integrity sha512-iah5nhSPTwtUV7yzpTc9xGg8gP3Ch2VNsuFMsKoCkNCrQSbFtx5KRPemmPJ32AUhTSDqJXB6djPN6zAaUGV53g== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: jest-regex-util "^29.6.3" - jest-snapshot "^29.6.3" + jest-snapshot "^29.7.0" jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" @@ -13543,17 +14139,17 @@ jest-resolve@^27.4.2, jest-resolve@^27.5.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-resolve@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.3.tgz#e3114e1514973c8f1607387c3042f4d2926f2d60" - integrity sha512-WMXwxhvzDeA/J+9jz1i8ZKGmbw/n+s988EiUvRI4egM+eTn31Hb5v10Re3slG3/qxntkBt2/6GkQVDGu6Bwyhw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.6.3" - jest-validate "^29.6.3" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" @@ -13585,30 +14181,30 @@ jest-runner@^27.5.1: source-map-support "^0.5.6" throat "^6.0.1" -jest-runner@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.3.tgz#162b1a549c4728265e716d75533b65b4c77e6b22" - integrity sha512-E4zsMhQnjhirFPhDTJgoLMWUrVCDij/KGzWlbslDHGuO8Hl2pVUfOiygMzVZtZq+BzmlqwEr7LYmW+WFLlmX8w== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^29.6.3" - "@jest/environment" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^29.6.3" - jest-environment-node "^29.6.3" - jest-haste-map "^29.6.3" - jest-leak-detector "^29.6.3" - jest-message-util "^29.6.3" - jest-resolve "^29.6.3" - jest-runtime "^29.6.3" - jest-util "^29.6.3" - jest-watcher "^29.6.3" - jest-worker "^29.6.3" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" p-limit "^3.1.0" source-map-support "0.5.13" @@ -13640,17 +14236,17 @@ jest-runtime@^27.5.1: slash "^3.0.0" strip-bom "^4.0.0" -jest-runtime@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.3.tgz#8bfa29447808419a7b5bed13beb0447a90344c65" - integrity sha512-VM0Z3a9xaqizGpEKwCOIhImkrINYzxgwk8oQAvrmAiXX8LNrJrRjyva30RkuRY0ETAotHLlUcd2moviCA1hgsQ== +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== dependencies: - "@jest/environment" "^29.6.3" - "@jest/fake-timers" "^29.6.3" - "@jest/globals" "^29.6.3" + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" @@ -13658,13 +14254,13 @@ jest-runtime@^29.6.3: collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" - jest-message-util "^29.6.3" - jest-mock "^29.6.3" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" jest-regex-util "^29.6.3" - jest-resolve "^29.6.3" - jest-snapshot "^29.6.3" - jest-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -13704,33 +14300,33 @@ jest-snapshot@^27.5.1: pretty-format "^27.5.1" semver "^7.3.2" -jest-snapshot@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.3.tgz#2435b50881f7bffdc1a66e66c64a2602c8086281" - integrity sha512-66Iu7H1ojiveQMGFnKecHIZPPPBjZwfQEnF6wxqpxGf57sV3YSUtAb5/sTKM5TPa3OndyxZp1wxHFbmgVhc53w== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.6.3" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.6.3" + jest-diff "^29.7.0" jest-get-type "^29.6.3" - jest-matcher-utils "^29.6.3" - jest-message-util "^29.6.3" - jest-util "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^29.6.3" + pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^27.2.0, jest-util@^27.5.1: +jest-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== @@ -13766,6 +14362,18 @@ jest-util@^29.6.3: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" @@ -13778,19 +14386,7 @@ jest-validate@^27.5.1: leven "^3.1.0" pretty-format "^27.5.1" -jest-validate@^29.2.1, jest-validate@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.3.tgz#a75fca774cfb1c5758c70d035d30a1f9c2784b4d" - integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.6.3" - -jest-validate@^29.4.3: +jest-validate@^29.4.3, jest-validate@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== @@ -13802,6 +14398,18 @@ jest-validate@^29.4.3: leven "^3.1.0" pretty-format "^29.7.0" +jest-validate@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.3.tgz#a75fca774cfb1c5758c70d035d30a1f9c2784b4d" + integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.6.3" + jest-watch-select-projects@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz#4373d7e4de862aae28b46e036b669a4c913ea867" @@ -13864,7 +14472,7 @@ jest-watcher@^28.0.0: jest-util "^28.1.3" string-length "^4.0.1" -jest-watcher@^29.0.0, jest-watcher@^29.6.3: +jest-watcher@^29.0.0: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.3.tgz#f5089852fc5f57ba1d956ec02d80cf2f6f34156d" integrity sha512-NgpFjZ2U2MKusjidbi4Oiu7tfs+nrgdIxIEVROvH1cFmOei9Uj25lwkMsakqLnH/s0nEcvxO1ck77FiRlcnpZg== @@ -13878,6 +14486,20 @@ jest-watcher@^29.0.0, jest-watcher@^29.6.3: jest-util "^29.6.3" string-length "^4.0.1" +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -13887,7 +14509,7 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.0.2, jest-worker@^27.2.0, jest-worker@^27.4.5, jest-worker@^27.5.1: +jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -13915,6 +14537,16 @@ jest-worker@^29.6.3: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^27.4.3: version "27.5.1" resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" @@ -13924,15 +14556,15 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" -jest@^29.4.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.3.tgz#118cf081d440d31b21989f61bfcd8b7797ca6a01" - integrity sha512-alueLuoPCDNHFcFGmgETR4KpQ+0ff3qVaiJwxQM4B5sC0CvXcgg4PEi7xrDkxuItDmdz/FVc7SSit4KEu8GRvw== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.6.3" + "@jest/core" "^29.7.0" "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.6.3" + jest-cli "^29.7.0" jimp-compact@0.16.1: version "0.16.1" @@ -14313,6 +14945,14 @@ lie@3.1.1: dependencies: immediate "~3.0.5" +lighthouse-logger@^1.0.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" + integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + lightningcss-darwin-arm64@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz#56ab071e932f845dbb7667f44f5b78441175a343" @@ -14687,6 +15327,11 @@ markdown-it@^13.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" +marky@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== + matchmediaquery@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/matchmediaquery/-/matchmediaquery-0.3.1.tgz#8247edc47e499ebb7c58f62a9ff9ccf5b815c6d7" @@ -14793,62 +15438,60 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -metro-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz#5efd1027353b36b73706164ef09c290dceac096a" - integrity sha512-Hh6PW34Ug/nShlBGxkwQJSgPGAzSJ9FwQXhUImkzdsDgVu6zj5bx258J8cJVSandjNoQ8nbaHK6CaHlnbZKbyA== +metro-babel-transformer@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.80.1.tgz#4c0bf77c312313c88fa677aab33e20e93fb383db" + integrity sha512-8mFluLGyOKzhedSAFANCe1cyT2fBlt1+tl0dqlcJI6OCP/V0I22bNFlyogWzseOjVTd3c0iEAbRXioZOUGOMzQ== dependencies: "@babel/core" "^7.20.0" - hermes-parser "0.12.0" + hermes-parser "0.17.1" nullthrows "^1.1.1" -metro-cache-key@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.76.8.tgz#8a0a5e991c06f56fcc584acadacb313c312bdc16" - integrity sha512-buKQ5xentPig9G6T37Ww/R/bC+/V1MA5xU/D8zjnhlelsrPG6w6LtHUS61ID3zZcMZqYaELWk5UIadIdDsaaLw== +metro-cache-key@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.80.1.tgz#66cf08fb5f19e26fdd7564635b12cdfb8df199b5" + integrity sha512-Hj2CWFVy11dEa7iNoy2fI14kD6DiFUD7houGTnFy9esCAm3y/hedciMXg4+1eihz+vtfhPWUIu+ZW/sXeIQkFQ== -metro-cache@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.76.8.tgz#296c1c189db2053b89735a8f33dbe82575f53661" - integrity sha512-QBJSJIVNH7Hc/Yo6br/U/qQDUpiUdRgZ2ZBJmvAbmAKp2XDzsapnMwK/3BGj8JNWJF7OLrqrYHsRsukSbUBpvQ== +metro-cache@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.80.1.tgz#3edf8dcda2b4782dfaf82edd67c56d4e6bc36cbd" + integrity sha512-pAYrlPCnomv7EQi08YSeoeF7YL3/4S3JzNn+nVp8e7AIOekO6Hf9j/GPRKfIQwll+os5bE9qFa++NPPmD59IeQ== dependencies: - metro-core "0.76.8" + metro-core "0.80.1" rimraf "^3.0.2" -metro-config@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.76.8.tgz#20bd5397fcc6096f98d2a813a7cecb38b8af062d" - integrity sha512-SL1lfKB0qGHALcAk2zBqVgQZpazDYvYFGwCK1ikz0S6Y/CM2i2/HwuZN31kpX6z3mqjv/6KvlzaKoTb1otuSAA== +metro-config@0.80.1, metro-config@^0.80.0: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.1.tgz#9a0e3359e77e93e781ca22e3be3667d6f00d5090" + integrity sha512-ADbPLfMAe68CJGwu6vM0cXImfME0bauLK8P98mQbiAP6xLYVehCdeXEWSe9plVWhzpPLNemSr1AlTvPTMdl3Bw== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" - jest-validate "^29.2.1" - metro "0.76.8" - metro-cache "0.76.8" - metro-core "0.76.8" - metro-runtime "0.76.8" + jest-validate "^29.6.3" + metro "0.80.1" + metro-cache "0.80.1" + metro-core "0.80.1" + metro-runtime "0.80.1" -metro-core@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.76.8.tgz#917c8157c63406cb223522835abb8e7c6291dcad" - integrity sha512-sl2QLFI3d1b1XUUGxwzw/KbaXXU/bvFYrSKz6Sg19AdYGWFyzsgZ1VISRIDf+HWm4R/TJXluhWMEkEtZuqi3qA== +metro-core@0.80.1, metro-core@^0.80.0: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.1.tgz#3bed22dd2f18e9524c2a45405406873d4f6749c0" + integrity sha512-f2Kav0/467YBG0DGAEX6+EQoYcUK+8vXIrEHQSkxCPXTjFcyppXUt2O6SDHMlL/Z5CGpd4uK1c/byXEfImJJdA== dependencies: lodash.throttle "^4.1.1" - metro-resolver "0.76.8" + metro-resolver "0.80.1" -metro-file-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.76.8.tgz#a1db1185b6c316904ba6b53d628e5d1323991d79" - integrity sha512-A/xP1YNEVwO1SUV9/YYo6/Y1MmzhL4ZnVgcJC3VmHp/BYVOXVStzgVbWv2wILe56IIMkfXU+jpXrGKKYhFyHVw== +metro-file-map@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.80.1.tgz#67d187fc522cba7ce033564fac0c8f12c6fc866f" + integrity sha512-Z00OaxlVx1Ynr3r3bZwgI9RXaimh1evTgofuk5TeYC5LEKWcAVr7QU0cGbjfhXa/kzD8iFFYPbDBENOXc398XQ== dependencies: anymatch "^3.0.3" debug "^2.2.0" fb-watchman "^2.0.0" graceful-fs "^4.2.4" invariant "^2.2.4" - jest-regex-util "^27.0.6" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-worker "^29.6.3" micromatch "^4.0.4" node-abort-controller "^3.1.1" nullthrows "^1.1.1" @@ -14856,76 +15499,13 @@ metro-file-map@0.76.8: optionalDependencies: fsevents "^2.3.2" -metro-inspector-proxy@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.76.8.tgz#6b8678a7461b0b42f913a7881cc9319b4d3cddff" - integrity sha512-Us5o5UEd4Smgn1+TfHX4LvVPoWVo9VsVMn4Ldbk0g5CQx3Gu0ygc/ei2AKPGTwsOZmKxJeACj7yMH2kgxQP/iw== - dependencies: - connect "^3.6.5" - debug "^2.2.0" - node-fetch "^2.2.0" - ws "^7.5.1" - yargs "^17.6.2" - -metro-minify-terser@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.76.8.tgz#915ab4d1419257fc6a0b9fa15827b83fe69814bf" - integrity sha512-Orbvg18qXHCrSj1KbaeSDVYRy/gkro2PC7Fy2tDSH1c9RB4aH8tuMOIXnKJE+1SXxBtjWmQ5Yirwkth2DyyEZA== +metro-minify-terser@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.80.1.tgz#b7f156edf11ab29a0f09ab09f1703036e678fb44" + integrity sha512-LfX3n895J6MsyiQkLz2SYcKVmZA1ag0NfYDyQapdnOd/oZmkdSu5jUWt0IjiohRLqKSnvyDp00OdQDRfhD3S8g== dependencies: terser "^5.15.0" -metro-minify-uglify@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.76.8.tgz#74745045ea2dd29f8783db483b2fce58385ba695" - integrity sha512-6l8/bEvtVaTSuhG1FqS0+Mc8lZ3Bl4RI8SeRIifVLC21eeSDp4CEBUWSGjpFyUDfi6R5dXzYaFnSgMNyfxADiQ== - dependencies: - uglify-es "^3.1.9" - -metro-react-native-babel-preset@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz#7476efae14363cbdfeeec403b4f01d7348e6c048" - integrity sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.4.0" - metro-react-native-babel-preset@^0.73.7: version "0.73.10" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.10.tgz#304b24bb391537d2c987732cc0a9774be227d3f6" @@ -14970,60 +15550,48 @@ metro-react-native-babel-preset@^0.73.7: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.8.tgz#c3a98e1f4cd5faf1e21eba8e004b94a90c4db69b" - integrity sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A== - dependencies: - "@babel/core" "^7.20.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.12.0" - metro-react-native-babel-preset "0.76.8" - nullthrows "^1.1.1" +metro-resolver@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.1.tgz#770da0d0b37354cd53b3ae73c14002f01c60d8e7" + integrity sha512-NuVTx+eplveM8mNybsCQ9BrATGw7lXhfEIvCa7gz6eMcKOQ6RBzwUXWMYKehw8KL4eIkNOHzdczAiGTRuhzrQg== -metro-resolver@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.76.8.tgz#0862755b9b84e26853978322464fb37c6fdad76d" - integrity sha512-KccOqc10vrzS7ZhG2NSnL2dh3uVydarB7nOhjreQ7C4zyWuiW9XpLC4h47KtGQv3Rnv/NDLJYeDqaJ4/+140HQ== - -metro-runtime@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.76.8.tgz#74b2d301a2be5f3bbde91b8f1312106f8ffe50c3" - integrity sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg== +metro-runtime@0.80.1, metro-runtime@^0.80.0: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.1.tgz#39835e38a0d283d5753af5b89aee1980dbe9d89c" + integrity sha512-RQ+crdwbC4oUYzWom8USCvJWEfFyIuQAeV0bVcNvbpaaz3Q4imXSINJkjDth37DHnxUlhNhEeAcRG6JQIO1QeA== dependencies: "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" -metro-source-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.76.8.tgz#f085800152a6ba0b41ca26833874d31ec36c5a53" - integrity sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw== +metro-source-map@0.80.1, metro-source-map@^0.80.0: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.1.tgz#979ed445ea716a78ea9b183254d5a66b7e9d6949" + integrity sha512-RoVaBdS44H68WY3vaO+s9/wshypPy8gKgcbND+A4FRxVsKM3+PI2pRoaAk4lTshgbmmXUuBZADzXdCz4F2JmnQ== dependencies: "@babel/traverse" "^7.20.0" "@babel/types" "^7.20.0" invariant "^2.2.4" - metro-symbolicate "0.76.8" + metro-symbolicate "0.80.1" nullthrows "^1.1.1" - ob1 "0.76.8" + ob1 "0.80.1" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz#f102ac1a306d51597ecc8fdf961c0a88bddbca03" - integrity sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w== +metro-symbolicate@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.80.1.tgz#028cdf32eecf9067ce6a6b9c133d1e911823b466" + integrity sha512-HxIHH/wLPyO9pZTmIfvCG/63n8UDTLjHzcWPMRUiLOc0cHa/NI2ewtik1VK2Lzm3swvU8EfD9XXJ//jEnIlhIg== dependencies: invariant "^2.2.4" - metro-source-map "0.76.8" + metro-source-map "0.80.1" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.76.8.tgz#d77c28a6547a8e3b72250f740fcfbd7f5408f8ba" - integrity sha512-PlkGTQNqS51Bx4vuufSQCdSn2R2rt7korzngo+b5GCkeX5pjinPjnO2kNhQ8l+5bO0iUD/WZ9nsM2PGGKIkWFA== +metro-transform-plugins@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.80.1.tgz#38729aab5d37e2d108aae1fab7e4bf94ef299a9b" + integrity sha512-sJkzY9WJ9p7t3TrvNuIxW/6z4nQZC1pN3nJl4eQmE2lmHBqEMeZr/83DyTnf9Up86abQAXHVZmG5JzXrq7Kb5g== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" @@ -15031,28 +15599,27 @@ metro-transform-plugins@0.76.8: "@babel/traverse" "^7.20.0" nullthrows "^1.1.1" -metro-transform-worker@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.76.8.tgz#b9012a196cee205170d0c899b8b175b9305acdea" - integrity sha512-mE1fxVAnJKmwwJyDtThildxxos9+DGs9+vTrx2ktSFMEVTtXS/bIv2W6hux1pqivqAfyJpTeACXHk5u2DgGvIQ== +metro-transform-worker@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.80.1.tgz#68b58e6a39cbfa8c8dde66acfe5f63c3f930f53d" + integrity sha512-SkX9JBQGbNkzJ2oF7sAi8Nbc0KRLj8Rus9Z4kPh++JCTNqEwsZV5z27ksr9I9EGbqL2/qfUrDZJo1OwozX6dhw== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" "@babel/parser" "^7.20.0" "@babel/types" "^7.20.0" - babel-preset-fbjs "^3.4.0" - metro "0.76.8" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-source-map "0.76.8" - metro-transform-plugins "0.76.8" + metro "0.80.1" + metro-babel-transformer "0.80.1" + metro-cache "0.80.1" + metro-cache-key "0.80.1" + metro-source-map "0.80.1" + metro-transform-plugins "0.80.1" nullthrows "^1.1.1" -metro@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.76.8.tgz#ba526808b99977ca3f9ac5a7432fd02a340d13a6" - integrity sha512-oQA3gLzrrYv3qKtuWArMgHPbHu8odZOD9AoavrqSFllkPgOtmkBvNNDLCELqv5SjBfqjISNffypg+5UGG3y0pg== +metro@0.80.1, metro@^0.80.0: + version "0.80.1" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.1.tgz#a4ac5975f5dcdde34a07d3a7d8ce9baca29ae319" + integrity sha512-yp0eLYFY+5seXr7KR1fe61eDL4Qf5dvLS6dl1eKn4DPKgROC9A4nTsulHdMy2ntXWgjnAZRJBDPHuh3tAi4/nQ== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.20.0" @@ -15062,7 +15629,6 @@ metro@0.76.8: "@babel/traverse" "^7.20.0" "@babel/types" "^7.20.0" accepts "^1.3.7" - async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" @@ -15070,28 +15636,25 @@ metro@0.76.8: denodeify "^1.2.1" error-stack-parser "^2.0.6" graceful-fs "^4.2.4" - hermes-parser "0.12.0" + hermes-parser "0.17.1" image-size "^1.0.2" invariant "^2.2.4" - jest-worker "^27.2.0" + jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-config "0.76.8" - metro-core "0.76.8" - metro-file-map "0.76.8" - metro-inspector-proxy "0.76.8" - metro-minify-terser "0.76.8" - metro-minify-uglify "0.76.8" - metro-react-native-babel-preset "0.76.8" - metro-resolver "0.76.8" - metro-runtime "0.76.8" - metro-source-map "0.76.8" - metro-symbolicate "0.76.8" - metro-transform-plugins "0.76.8" - metro-transform-worker "0.76.8" + metro-babel-transformer "0.80.1" + metro-cache "0.80.1" + metro-cache-key "0.80.1" + metro-config "0.80.1" + metro-core "0.80.1" + metro-file-map "0.80.1" + metro-minify-terser "0.80.1" + metro-resolver "0.80.1" + metro-runtime "0.80.1" + metro-source-map "0.80.1" + metro-symbolicate "0.80.1" + metro-transform-plugins "0.80.1" + metro-transform-worker "0.80.1" mime-types "^2.1.27" node-fetch "^2.2.0" nullthrows "^1.1.1" @@ -15223,14 +15786,7 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minipass@^3.0.0, minipass@^3.1.1: +minipass@3.3.6, minipass@^3.0.0, minipass@^3.1.1: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== @@ -15292,6 +15848,11 @@ moo@^0.5.1: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -15596,10 +16157,10 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -ob1@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.76.8.tgz#ac4c459465b1c0e2c29aaa527e09fc463d3ffec8" - integrity sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g== +ob1@0.80.1: + version "0.80.1" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.80.1.tgz#6507f8c95ff30a9ddb07f96fccbd8f3d4ccafc04" + integrity sha512-o9eYflOo+QnbC/k9GYQuAy90zOGQ/OBgrjlIeW6VrKhevSxth83JSdEvKuKaV7SMGJVQhSY3Zp8eGa3g0rLP0A== obj-case@0.2.1: version "0.2.1" @@ -15783,7 +16344,7 @@ open@^6.2.0: dependencies: is-wsl "^1.1.0" -open@^7.4.2: +open@^7.0.3, open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -16066,11 +16627,6 @@ patch-package@^6.5.1: tmp "^0.0.33" yaml "^1.10.2" -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -17085,7 +17641,7 @@ promise@^8.1.0, promise@^8.3.0: dependencies: asap "~2.0.6" -prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.0, prompts@^2.4.2: +prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -17093,7 +17649,7 @@ prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.0, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@*, prop-types@^15.6.1, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.1, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -17330,6 +17886,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@^6.5.1: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + query-string@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -17406,16 +17969,6 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@~1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -17482,10 +18035,10 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-devtools-core@^4.27.2: - version "4.28.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.0.tgz#3fa18709b24414adddadac33b6b9cea96db60f2f" - integrity sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg== +react-devtools-core@^4.27.7: + version "4.28.5" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.5.tgz#c8442b91f068cdf0c899c543907f7f27d79c2508" + integrity sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA== dependencies: shell-quote "^1.6.1" ws "^7" @@ -17535,12 +18088,12 @@ react-native-dotenv@^3.3.1: dependencies: dotenv "^16.3.1" -react-native-drawer-layout@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-3.2.1.tgz#eb626216181965e72de6d9377ca619fab40226f2" - integrity sha512-9GDzSLBblxox1zEACcbdXHMU8m22gCTdpT9g1G3Za4Bu766IDxVnIbgRGz6Z2dL99EMtz5E2JoWx257tdHkbpw== +react-native-drawer-layout@^4.0.0-alpha.3: + version "4.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-4.0.0-alpha.3.tgz#0adf51e816f2ce094d415fe33d9f43c1e6df6ae2" + integrity sha512-BRlX8l2gDD41fs8RfaemjDBDV0PPspDMvej/3b9QWfp+JQ/H8tkSdWBtUBbSBzYdqyqy2bHV4epOCMb4t+0B0g== dependencies: - use-latest-callback "^0.1.5" + use-latest-callback "^0.1.9" react-native-fs@^2.20.0: version "2.20.0" @@ -17550,10 +18103,10 @@ react-native-fs@^2.20.0: base-64 "^0.1.0" utf8 "^3.0.0" -react-native-gesture-handler@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.12.1.tgz#f11a99fb95169810c6886fad5efa01a17fd81660" - integrity sha512-deqh36bw82CFUV9EC4tTo2PP1i9HfCOORGS3Zmv71UYhEZEHkzZv18IZNPB+2Awzj45vLIidZxGYGFxHlDSQ5A== +react-native-gesture-handler@~2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.14.0.tgz#d6aec0d8b2e55c67557fd6107e828c0a1a248be8" + integrity sha512-cOmdaqbpzjWrOLUpX3hdSjsMby5wq3PIEdMq7okJeg9DmCzanysHSrktw1cXWNc/B5MAgxAn9J7Km0/4UIqKAQ== dependencies: "@egjs/hammerjs" "^2.0.17" hoist-non-react-statics "^3.3.0" @@ -17561,10 +18114,10 @@ react-native-gesture-handler@^2.12.1: lodash "^4.17.21" prop-types "^15.7.2" -react-native-get-random-values@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/react-native-get-random-values/-/react-native-get-random-values-1.9.0.tgz#6cb30511c406922e75fe73833dc1812a85bfb37e" - integrity sha512-+29IR2oxzxNVeaRwCqGZ9ABadzMI8SLTBidrIDXPOkKnm5+kEmLt34QKM4JV+d2usPErvKyS85le0OmGTHnyWQ== +react-native-get-random-values@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz#1cb4bd4bd3966a356e59697b8f372999fe97cb16" + integrity sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA== dependencies: fast-base64-decode "^1.0.0" @@ -17598,10 +18151,10 @@ react-native-linear-gradient@^2.6.2: resolved "https://registry.yarnpkg.com/react-native-linear-gradient/-/react-native-linear-gradient-2.8.2.tgz#9811c91751be673ef928ef4aa3ff3a70b82935d6" integrity sha512-hgmCsgzd58WNcDCyPtKrvxsaoETjb/jLGxis/dmU3Aqm2u4ICIduj4ECjbil7B7pm9OnuTkmpwXu08XV2mpg8g== -react-native-pager-view@6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.1.4.tgz#3a63ebd1b72f81991157ea552bb9c887e529bc8c" - integrity sha512-fmTwgGwPxGCBusKAq7gHzm+s1Yp0qh5rKPoQszaCuxrb+76KgK4Qe82jJNPUp2xTZOKSw+FbJU2QahF8ncTl+w== +react-native-pager-view@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.2.2.tgz#4c1c45d5f3f622c0922ef96ac114666392ebf5ec" + integrity sha512-MLkJB7iP6v0Hd4/B4/R/gLCSE+YBtjxG/vHZYBDU+fI3U7HBYgKAg4o6ad8HxbKVcWWyRDNeeVRGISw1MUjlHw== react-native-picker-select@^8.1.0: version "8.1.0" @@ -17632,15 +18185,15 @@ react-native-root-siblings@^4.1.1: resolved "https://registry.yarnpkg.com/react-native-root-siblings/-/react-native-root-siblings-4.1.1.tgz#b7742db7634a87f507eb99a5fd699c4f10c46ab0" integrity sha512-sdmLElNs5PDWqmZmj4/aNH4anyxreaPm61c4ZkRiR8SO/GzLg6KjAbb0e17RmMdnBdD0AIQbS38h/l55YKN4ZA== -react-native-safe-area-context@4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.6.3.tgz#f06cfea05b1c4b018aa9758667a109f619c62b55" - integrity sha512-3CeZM9HFXkuqiU9HqhOQp1yxhXw6q99axPWrT+VJkITd67gnPSU03+U27Xk2/cr9XrLUnakM07kj7H0hdPnFiQ== +react-native-safe-area-context@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.7.4.tgz#3dd8438971e70043d76f2428ede75b8a9639265e" + integrity sha512-3LR3DCq9pdzlbq6vsHGWBFehXAKDh2Ljug6jWhLWs1QFuJHM6AS2+mH2JfKlB2LqiSFZOBcZfHQFz0sGaA3uqg== -react-native-screens@~3.22.0: - version "3.22.1" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.22.1.tgz#b0eb0696dbf1f9a852061cc71c0f8cdb95ed8e53" - integrity sha512-ffzwUdVKf+iLqhWSzN5DXBm0s2w5sN0P+TaHHPAx42LT7+DT0g8PkHT1QDvxpR5vCEPSS1i3EswyVK4HCuhTYg== +react-native-screens@~3.27.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.27.0.tgz#2ac39f78dee27df97d3b6fb11ebf8e5751aa986a" + integrity sha512-FzSUygZ7yLQyhDJZsl7wU68LwRpVtVdqOPWribmEU3Tf26FohFGGcfJx1D8lf2V2Teb8tI+IaLnXCKbyh2xffA== dependencies: react-freeze "^1.0.0" warn-once "^0.1.0" @@ -17650,10 +18203,10 @@ react-native-splash-screen@^3.3.0: resolved "https://registry.yarnpkg.com/react-native-splash-screen/-/react-native-splash-screen-3.3.0.tgz#3af71ed17afe50fee69590a45aec399d071ead02" integrity sha512-rGjt6HkoSXxMqH4SQUJ1gnPQlPJV8+J47+4yhgTIan4bVvAwJhEeJH7wWt9hXSdH4+VfwTS0GTaflj1Tw83IhA== -react-native-svg@13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-13.9.0.tgz#8df8a690dd00362601f074dec5d3a86dd0f99c7f" - integrity sha512-Ey18POH0dA0ob/QiwCBVrxIiwflhYuw0P0hBlOHeY4J5cdbs8ngdKHeWC/Kt9+ryP6fNoEQ1PUgPYw2Bs/rp5Q== +react-native-svg@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-14.0.0.tgz#ea1974dec9a91a09c6a38b7bf58d85e857c291f5" + integrity sha512-17W/gWXRUMS7p7PSHu/WyGkZUc1NzRTGxxXc0VqBLjzKSchyb0EmgsiWf9aKmfC6gmY0wcsmKZcGV41bCcNfBA== dependencies: css-select "^5.1.0" css-tree "^1.1.3" @@ -17680,6 +18233,13 @@ react-native-web-linear-gradient@^1.1.2: resolved "https://registry.yarnpkg.com/react-native-web-linear-gradient/-/react-native-web-linear-gradient-1.1.2.tgz#33f85f7085a0bb5ffa5106faf02ed105b92a9ed7" integrity sha512-SmUnpwT49CEe78pXvIvYf72Es8Pv+ZYKCnEOgb2zAKpEUDMo0+xElfRJhwt5nfI8krJ5WbFPKnoDgD0uUjAN1A== +react-native-web-webview@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-native-web-webview/-/react-native-web-webview-1.0.2.tgz#c215efa70c17589f2c8d640b1f1dc669b18c6e02" + integrity sha512-oNAYNuqUqeqTuAAdIejzDqvUtYA+k5lrvhUYmASdUznZNmyIaoQFA6OKoA4K9F3wdMvark42vUXkUWIp875ewg== + dependencies: + qs "^6.5.1" + react-native-web@~0.19.6: version "0.19.8" resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.19.8.tgz#46127f8b310148fde11e4fef67fe625603599d47" @@ -17694,58 +18254,74 @@ react-native-web@~0.19.6: postcss-value-parser "^4.2.0" styleq "^0.1.3" -react-native@0.72.5: - version "0.72.5" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.72.5.tgz#2c343fa6f3ead362cf07376634a33a4078864357" - integrity sha512-oIewslu5DBwOmo7x5rdzZlZXCqDIna0R4dUwVpfmVteORYLr4yaZo5wQnMeR+H7x54GaMhmgeqp0ZpULtulJFg== +react-native-webview@^13.6.3: + version "13.6.3" + resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.6.3.tgz#f3d26e942ef5cc5a07547f2e47903aa81a68e25e" + integrity sha512-IApO0JSj0uAWsBGKWagyfgDYoX29piiMYLmkHtRjKeL1rIVjLoR/bMe7KJ/0X47y86b//a6u3cYQtphyay+F2A== dependencies: - "@jest/create-cache-key-function" "^29.2.1" - "@react-native-community/cli" "11.3.7" - "@react-native-community/cli-platform-android" "11.3.7" - "@react-native-community/cli-platform-ios" "11.3.7" - "@react-native/assets-registry" "^0.72.0" - "@react-native/codegen" "^0.72.7" - "@react-native/gradle-plugin" "^0.72.11" - "@react-native/js-polyfills" "^0.72.1" - "@react-native/normalize-colors" "^0.72.0" - "@react-native/virtualized-lists" "^0.72.8" + escape-string-regexp "2.0.0" + invariant "2.2.4" + +react-native-youtube-iframe@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-native-youtube-iframe/-/react-native-youtube-iframe-2.3.0.tgz#40ca8e55db929b91bfa8e8d30e411658cbc304c5" + integrity sha512-M+z63xwXVtS4dX3k8PbtHUUcWN+gRZt6J1EtPE7Y60BMOB979KjpkdrHqeR96or9pNR2W8K5tQhIkMXW2jwo7Q== + dependencies: + events "^3.2.0" + +react-native@0.73.1: + version "0.73.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.1.tgz#5eafaa7e54feeab8b55e8b8e4efc4d21052a4fff" + integrity sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA== + dependencies: + "@jest/create-cache-key-function" "^29.6.3" + "@react-native-community/cli" "12.3.0" + "@react-native-community/cli-platform-android" "12.3.0" + "@react-native-community/cli-platform-ios" "12.3.0" + "@react-native/assets-registry" "^0.73.1" + "@react-native/codegen" "^0.73.2" + "@react-native/community-cli-plugin" "0.73.11" + "@react-native/gradle-plugin" "^0.73.4" + "@react-native/js-polyfills" "^0.73.1" + "@react-native/normalize-colors" "^0.73.2" + "@react-native/virtualized-lists" "^0.73.4" abort-controller "^3.0.0" anser "^1.4.9" - base64-js "^1.1.2" - deprecated-react-native-prop-types "4.1.0" + ansi-regex "^5.0.0" + base64-js "^1.5.1" + deprecated-react-native-prop-types "^5.0.0" event-target-shim "^5.0.1" - flow-enums-runtime "^0.0.5" + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - jest-environment-node "^29.2.1" + jest-environment-node "^29.6.3" jsc-android "^250231.0.0" memoize-one "^5.0.0" - metro-runtime "0.76.8" - metro-source-map "0.76.8" + metro-runtime "^0.80.0" + metro-source-map "^0.80.0" mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.3.0" - react-devtools-core "^4.27.2" - react-refresh "^0.4.0" + react-devtools-core "^4.27.7" + react-refresh "^0.14.0" react-shallow-renderer "^16.15.0" regenerator-runtime "^0.13.2" scheduler "0.24.0-canary-efb381bbf-20230505" stacktrace-parser "^0.1.10" - use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" ws "^6.2.2" yargs "^17.6.2" +react-refresh@0.14.0, react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== - react-refresh@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" @@ -18179,7 +18755,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve.exports@^2.0.0: +resolve.exports@^2.0.0, resolve.exports@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== @@ -18583,13 +19159,6 @@ sentry-expo@~7.0.1: mkdirp "^1.0.4" rimraf "^3.0.2" -serialize-error@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-6.0.0.tgz#ccfb887a1dd1c48d6d52d7863b92544331fd752b" - integrity sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA== - dependencies: - type-fest "^0.12.0" - serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" @@ -18644,6 +19213,11 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-cookie-parser@^2.4.8: + version "2.6.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + set-function-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -18824,7 +19398,7 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slugify@^1.3.4: +slugify@^1.3.4, slugify@^1.6.6: version "1.6.6" resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== @@ -18872,7 +19446,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.20, source-map-support@~0.5.21: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -18880,6 +19454,11 @@ source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.2 buffer-from "^1.0.0" source-map "^0.6.0" +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -18969,6 +19548,13 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-generator@^2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== + dependencies: + stackframe "^1.3.4" + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -18981,6 +19567,23 @@ stackframe@^1.3.4: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== +stacktrace-gps@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== + dependencies: + source-map "0.5.6" + stackframe "^1.3.4" + +stacktrace-js@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -19028,6 +19631,11 @@ stream-json@^1.7.4: dependencies: stream-chain "^2.2.5" +stream-slice@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/stream-slice/-/stream-slice-0.1.2.tgz#2dc4f4e1b936fb13f3eb39a2def1932798d07a4b" + integrity sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA== + streamx@^2.15.0: version "2.15.5" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.5.tgz#87bcef4dc7f0b883f9359671203344a4e004c7f1" @@ -19790,7 +20398,7 @@ tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -19821,11 +20429,6 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.12.0.tgz#f57a27ab81c68d136a51fd71467eff94157fa1ee" - integrity sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg== - type-fest@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" @@ -19927,10 +20530,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.1.3: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== ua-parser-js@^0.7.33: version "0.7.35" @@ -19947,14 +20550,6 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -uglify-es@^3.1.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" @@ -20010,6 +20605,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unimodules-app-loader@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/unimodules-app-loader/-/unimodules-app-loader-4.5.0.tgz#5ec66088d740bd17dc5c94b88c91f21249d9f0ba" + integrity sha512-q/Xug4K6/20876Xac+tjOLOOAeHEu2zF66LNN/5c8EV4WPEe/+RYZEljN/woQt17KPIB2eyel9dc+d6qUMjUOg== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -20115,7 +20715,7 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse@^1.5.3, url-parse@^1.5.9: +url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -20142,6 +20742,11 @@ use-latest-callback@^0.1.5: resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.6.tgz#3fa6e7babbb5f9bfa24b5094b22939e1e92ebcf6" integrity sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg== +use-latest-callback@^0.1.9: + version "0.1.9" + resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" + integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== + use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" @@ -20150,11 +20755,6 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -20180,7 +20780,7 @@ util.promisify@~1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" -util@^0.12.0: +util@^0.12.0, util@^0.12.3: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -20201,7 +20801,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -20331,6 +20931,20 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-encoding@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" + integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== + dependencies: + util "^0.12.3" + optionalDependencies: + "@zxing/text-encoding" "0.9.0" + +web-streams-polyfill@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"