From fedb94dd70903ba5b653bd7fc76800ddb1f2bc4d Mon Sep 17 00:00:00 2001 From: Hailey <153161762+haileyok@users.noreply.github.com> Date: Thu, 21 Dec 2023 14:33:46 -0800 Subject: [PATCH] 3rd party embed player (#2217) * Implement embed player for YT, spotify, and twitch * fix: handle blur event * fix: use video dimensions for twitch * fix: remove hack (?) * fix: remove origin whitelist (?) * fix: prevent ads from opening in browser * fix: handle embeds that don't have a thumb * feat: handle dark/light mode * fix: ts warning * fix: adjust height of no-thumb label * fix: adjust height of no-thumb label * fix: remove debug log, set collapsable to false for player view * fix: fix dimensions "flash" * chore: remove old youtube link test * tests: add tests * fix: thumbless embed position when loading * fix: remove background from webview * cleanup embeds (almost) * more refactoring - Use separate layers for player and overlay to prevent weird sizing issues - Be sure the image is not visible under the player - Clean up some * cleanup styles * parse youtube shorts urls * remove debug * add soundcloud tracks and sets (playlists) * move logic into `ExternalLinkEmbed` * border radius for yt player on native * fix styling on web * allow scrolling in webview on android * remove unnecessary check * autoplay yt on web * fix tests after adding autoplay * move `useNavigation` to top of component --------- Co-authored-by: Paul Frazee --- __tests__/lib/string.test.ts | 167 ++++++++++-- package.json | 3 + src/lib/strings/embed-player.ts | 147 ++++++++++ src/lib/strings/url-helpers.ts | 29 -- src/locale/locales/en/messages.js | 1 + src/locale/locales/hi/messages.js | 1 + src/locale/locales/ja/messages.js | 1 + .../util/post-embeds/ExternalLinkEmbed.tsx | 18 +- .../util/post-embeds/ExternalPlayerEmbed.tsx | 251 ++++++++++++++++++ .../com/util/post-embeds/YoutubeEmbed.tsx | 55 ---- src/view/com/util/post-embeds/index.tsx | 18 +- yarn.lock | 41 ++- 12 files changed, 597 insertions(+), 135 deletions(-) create mode 100644 src/lib/strings/embed-player.ts create mode 100644 src/locale/locales/en/messages.js create mode 100644 src/locale/locales/hi/messages.js create mode 100644 src/locale/locales/ja/messages.js create mode 100644 src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx delete mode 100644 src/view/com/util/post-embeds/YoutubeEmbed.tsx diff --git a/__tests__/lib/string.test.ts b/__tests__/lib/string.test.ts index 63bd785e..99b0d253 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/package.json b/package.json index 3e87da93..e69ad6bf 100644 --- a/package.json +++ b/package.json @@ -160,6 +160,9 @@ "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.2", + "react-native-youtube-iframe": "^2.3.0", "react-responsive": "^9.0.2", "rn-fetch-blob": "^0.12.0", "sentry-expo": "~7.0.1", diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts new file mode 100644 index 00000000..fdd39280 --- /dev/null +++ b/src/lib/strings/embed-player.ts @@ -0,0 +1,147 @@ +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 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=localhost`, + } + } + } + + // 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 e9bf4111..8a71718c 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/locales/en/messages.js b/src/locale/locales/en/messages.js new file mode 100644 index 00000000..9d5ca51a --- /dev/null +++ b/src/locale/locales/en/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"OyEWua\":[[\"invitesAvailable\"],\" invite code available\"],\"eFIdHP\":[[\"invitesAvailable\"],\" invite codes available\"],\"wapGcj\":[[\"message\"]],\"umrH9L\":\"<0/> members\",\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"GH9ldj\":\"<0>Note: This setting may not be respected by third-party apps that display Bluesky content.\",\"Ga0T2l\":\"<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"e6un1h\":\"Appeal Decision\",\"c0PCYD\":\"Appeal this decision\",\"oifO1p\":\"Appeal this decision.\",\"aAIQg2\":\"Appearance\",\"9K5XIM\":\"Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users.\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"uVotT3\":\"Ask apps to limit the visibility of my account\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"hIysMc\":\"Block list\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"u9cCQU\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"7LTXf4\":\"Copy link to list\",\"dWsPi5\":\"Copy link to post\",\"jw+abr\":\"Copy link to profile\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"9Y7FMD\":\"Discourage apps from showing my account to logged-out users\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"9xK+YC\":\"End of feed\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"wlzBtv\":\"Everybody\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"jdbMSV\":\"Followed users\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"FynkM2\":\"Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"wkCNhr\":\"Hmm, we're having trouble finding this feed. It may have been deleted.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"UY2916\":[\"Invite codes: \",[\"invitesAvailable\"],\" available\"],\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"lvYkpV\":\"Learn more about what is public on Bluesky.\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"zZOZj7\":\"Likes\",\"KGL/DU\":\"Limit the visibility of my account\",\"AUSVsF\":\"Limit the visibility of my account to logged-out users\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"5Aq6mk\":\"Logged-out users\",\"w2yNjr\":\"Logged-out visibility\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"xYilR2\":\"Media\",\"S9V0C/\":\"mentioned users\",\"31/84x\":\"Mentioned users\",\"zucql+\":\"Menu\",\"kTQnAw\":\"Message from server\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"3j2OjF\":\"Moderation Lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"25PHAB\":\"Mute list\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"qhwV2C\":\"My Account\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"xpF9po\":\"Nobody\",\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"ACqM3c\":\"Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users.\",\"+lYa0i\":\"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.\",\"OdiASL\":\"Note: Third-party apps that display Bluesky content may not respect this setting.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"Kq2/SU\":[\"Only \",[\"0\"],\" can reply.\"],\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"d7tryi\":\"Please tell us why you think this decision was incorrect.\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"+owNNn\":\"Posts\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"9nSV9I\":\"Public, shareable lists of users to mute or block in bulk.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"3fdNAy\":\"Remove this feed from my feeds?\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"N8UzTV\":\"Replies\",\"oQPadq\":\"Replies to this thread are disabled\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"pJoi/P\":\"Request to limit the visibility of my account\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"hQRttt\":\"Submit\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"jSe8k/\":[\"This \",[\"0\"],\" has been labeled.\"],\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"aBX1qv\":\"This content is not viewable without a Bluesky account.\",\"xI4xW5\":\"This feed is currently receiving high traffic and is temporarily unavailable. Please try again later.\",\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"RF3/jE\":\"Un-block list\",\"+/SGK9\":\"Un-mute list\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"EvGmWj\":\"Unpin moderation list\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"Hbhyg2\":\"users followed by <0/>\",\"1Z9Mdf\":\"Users followed by <0/>\",\"9k1aoj\":[\"Users in \\\"\",[\"0\"],\"\\\"\"],\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"2iYPLH\":\"We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"yvDWMs\":\"Who can reply\",\"GKc8LT\":\"Who can reply?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"CbrOgr\":\"You have no feeds.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"rsWkoR\":\"Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private.\",\"jjscPy\":\"Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private.\",\"ogY7EU\":\"Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in.\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file diff --git a/src/locale/locales/hi/messages.js b/src/locale/locales/hi/messages.js new file mode 100644 index 00000000..fd35fb8a --- /dev/null +++ b/src/locale/locales/hi/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- फ़ीड का अंत -\",\"EtUMsZ\":\"यह चेतावनी केवल मीडिया वाले पोस्ट के लिए उपलब्ध है।\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" सूची\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"OyEWua\":[[\"invitesAvailable\"],\" invite code available\"],\"eFIdHP\":[[\"invitesAvailable\"],\" invite codes available\"],\"wapGcj\":[[\"message\"]],\"umrH9L\":\"<0/> members\",\"gMjqbV\":\"<0>अपना<1>पसंदीदा<2>फ़ीड चुनें\",\"F657la\":\"<0>कुछ<1>पसंदीदा उपयोगकर्ताओं<2>का अनुसरण करें\",\"6RmyWt\":\"<0>इधर आपका ऐप पासवर्ड है। इसे अपने हैंडल के साथ दूसरे ऐप में साइन करने के लिए उपयोग करें।।\",\"GH9ldj\":\"<0>Note: This setting may not be respected by third-party apps that display Bluesky content.\",\"Ga0T2l\":\"<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.\",\"XCTqGE\":\"ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।\",\"AnNF5e\":\"प्रवेर्शयोग्यता\",\"AeXO77\":\"अकाउंट\",\"4WY4MD\":\"अकाउंट के विकल्प\",\"m16xKo\":\"ऐड करो\",\"fBBX+K\":\"सामग्री चेतावनी जोड़ें\",\"JU3hs2\":\"इस सूची में किसी को जोड़ें\",\"MPPZ54\":\"अकाउंट जोड़ें\",\"LkA8jz\":\"इस फ़ोटो में विवरण जोड़ें\",\"Z8idyM\":\"विवरण जोड़ें\",\"AoXl11\":\"रिपोर्ट करने के लिए विवरण जोड़ें\",\"iE6B/9\":\"लिंक कार्ड जोड़ें\",\"EXHdP1\":\"लिंक कार्ड जोड़ें:\",\"x6laaL\":\"अपने डोमेन में निम्नलिखित DNS रिकॉर्ड जोड़ें:\",\"UmzMP4\":\"सूचियों में जोड़ें\",\"hCrQ0L\":\"इस फ़ीड को सहेजें\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"पसंद की संख्या को समायोजित करें उत्तर को आपके फ़ीड में दिखाया जाना चाहिए।।\",\"qLa52r\":\"वयस्क सामग्री\",\"sxkWRg\":\"विकसित\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"वैकल्पिक पाठ\",\"0QlT7/\":\"ऑल्ट टेक्स्ट अंधा और कम दृश्य लोगों के लिए छवियों का वर्णन करता है, और हर किसी को संदर्भ देने में मदद करता है।।\",\"woXbjq\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"Fon2dK\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"HZFm5R\":\"और\",\"fdjKGe\":\"ऐप भाषा\",\"SMmUnj\":\"ऐप पासवर्ड\",\"8q4WlH\":\"ऐप पासवर्ड\",\"e6un1h\":\"Appeal Decision\",\"c0PCYD\":\"Appeal this decision\",\"oifO1p\":\"Appeal this decision.\",\"aAIQg2\":\"दिखावट\",\"9K5XIM\":\"Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users.\",\"SSDZ+T\":[\"क्या आप वाकई ऐप पासवर्ड \\\"\",[\"name\"],\"\\\" हटाना चाहते हैं?\"],\"0BIeIs\":\"क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?\",\"6foA8n\":\"क्या आप वास्तव में इसे करना चाहते हैं?\",\"/mSd6b\":\"क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।\",\"EbvWd3\":\"कलात्मक या गैर-कामुक नग्नता।।\",\"uVotT3\":\"Ask apps to limit the visibility of my account\",\"iH8pgl\":\"वापस\",\"ehOkF+\":\"मूल बातें\",\"+gCI2a\":\"जन्मदिन\",\"pieVBA\":\"जन्मदिन:\",\"m1dqxu\":\"खाता ब्लॉक करें\",\"ffIfdM\":\"खाता ब्लॉक करें\",\"hIysMc\":\"Block list\",\"fdYcMy\":\"खाता ब्लॉक करें?\",\"KWykPE\":\"ब्लॉक किए गए खाते\",\"JuqQpF\":\"ब्लॉक किए गए खाते\",\"HG4qt4\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"8LNSUt\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।\",\"HFCE4A\":\"ब्लॉक पोस्ट।\",\"zl+QbX\":\"अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky लचीला है।।\",\"odLrdl\":\"Bluesky खुला है।।\",\"/LsWK4\":\"Bluesky सार्वजनिक है।।\",\"C50OGr\":\"ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।\",\"u9cCQU\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"कैमरा\",\"JGGrPC\":\"केवल अक्षर, संख्या, रिक्त स्थान, डैश और अंडरस्कोर हो सकते हैं। कम से कम 4 अक्षर लंबा होना चाहिए, लेकिन 32 अक्षरों से अधिक लंबा नहीं होना चाहिए।।\",\"dEgA5A\":\"कैंसिल\",\"aMH9rr\":\"अकाउंट बंद मत करो\",\"kc3E4R\":\"ऑल्ट टेक्स्ट मत जोड़ें\",\"wg4LHQ\":\"नाम मत बदलो\",\"hFL1Li\":\"तस्वीर को क्रॉप मत करो\",\"tijH8t\":\"प्रोफ़ाइल संपादन मत करो\",\"Qe4C/d\":\"कोटे पोस्ट मत करो\",\"5TviPn\":\"खोज मत करो\",\"nss3UV\":\"प्रतीक्षा सूची पंजीकरण मत करो\",\"o+XJ9D\":\"परिवर्तन\",\"pQco5R\":\"हैंडल बदलें\",\"Q5e1U/\":\"हैंडल बदलें\",\"a3NAfL\":\"मेरा ईमेल बदलें\",\"4vatyk\":\"मेरा ईमेल बदलें\",\"Yn3C90\":\"कुछ अनुशंसित फ़ीड देखें. उन्हें अपनी पिन की गई फ़ीड की सूची में जोड़ने के लिए + टैप करें।\",\"ioZXIH\":\"कुछ अनुशंसित उपयोगकर्ताओं की जाँच करें। ऐसे ही उपयोगकर्ता देखने के लिए उनका अनुसरण करें।\",\"/+X+/K\":\"नीचे प्रवेश करने के लिए OTP कोड के साथ एक ईमेल के लिए अपने इनबॉक्स की जाँच करें:\",\"Rt502e\":\"सेवा चुनें\",\"/L45sc\":\"उन एल्गोरिदम का चयन करें जो कस्टम फीड्स के साथ अपने अनुभव को शक्ति देते हैं।।\",\"Wk8hkn\":\"अपना पासवर्ड चुनें\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"खोज क्वेरी साफ़ करें\",\"flH7u/\":\"चेतावनी को बंद करो\",\"hYmnbk\":\"बंद करो\",\"47L1V1\":\"छवि बंद करें\",\"l49ujN\":\"छवि बंद करें\",\"UryHFO\":\"नेविगेशन पाद बंद करें\",\"KHzDTk\":\"समुदाय दिशानिर्देश\",\"o8UUti\":\"जवाब लिखो\",\"7VpPHA\":\"हो गया\",\"q8upsf\":\"बदलाव की पुष्टि करें\",\"8pNKIr\":\"सामग्री भाषा सेटिंग्स की पुष्टि करें\",\"tGg8Kt\":\"खाते को हटा दें\",\"ioZOzk\":\"OTP कोड\",\"J28zul\":\"कनेक्टिंग ..।\",\"l879p1\":\"सामग्री फ़िल्टरिंग\",\"m8j6up\":\"सामग्री फ़िल्टरिंग\",\"/PlAsF\":\"सामग्री भाषा\",\"cogwXi\":\"सामग्री चेतावनी\",\"FG7AQv\":\"सामग्री चेतावनी\",\"xGVfLh\":\"आगे बढ़ें\",\"6V3Ea3\":\"कॉपी कर ली\",\"he3ygx\":\"कॉपी\",\"7LTXf4\":\"Copy link to list\",\"dWsPi5\":\"Copy link to post\",\"jw+abr\":\"Copy link to profile\",\"iQgJaz\":\"पोस्ट टेक्स्ट कॉपी करें\",\"u40k/o\":\"कॉपीराइट नीति\",\"7wWvgo\":\"फ़ीड लोड नहीं कर सकता\",\"8NNr/O\":\"सूची लोड नहीं कर सकता\",\"mpt9T+\":\"नया खाता बनाएं\",\"IS0nrP\":\"खाता बनाएँ\",\"6HbhpU\":\"नया खाता बनाएं\",\"MXSt4t\":[\"बनाया गया \",[\"0\"]],\"GAD3Dx\":\"कस्टम डोमेन\",\"ZQKLI1\":\"खतरा क्षेत्र\",\"pvnfJD\":\"डार्क मोड\",\"ZDGm40\":\"खाता हटाएं\",\"vzX5FB\":\"खाता हटाएं\",\"gUEtxf\":\"अप्प पासवर्ड हटाएं\",\"84uE/A\":\"सूची हटाएँ\",\"ktknoE\":\"मेरा खाता हटाएं\",\"szz0+N\":\"मेरा खाता हटाएं…\",\"04G5Az\":\"पोस्ट को हटाएं\",\"FbPNuJ\":\"इस पोस्ट को डीलीट करें?\",\"u+1OHY\":\"यह पोस्ट मिटाई जा चुकी है\",\"Nu4oKW\":\"विवरण\",\"dacKHE\":\"देव सर्वर\",\"2ygkE8\":\"डेवलपर उपकरण\",\"bzSI52\":\"Discard\",\"BryYJR\":\"ड्राफ्ट हटाएं\",\"9Y7FMD\":\"Discourage apps from showing my account to logged-out users\",\"pbLwal\":\"नए फ़ीड की खोज करें\",\"pfa8F0\":\"नाम\",\"0gS7M5\":\"प्रदर्शन का नाम\",\"iZ5pMB\":\"डोमेन सत्यापित!\",\"DPfwMq\":\"खत्म\",\"zT97vP\":[\"खत्म \",[\"extraText\"]],\"4uwlSD\":\"प्रत्येक कोड एक बार काम करता है। आपको समय-समय पर अधिक आमंत्रण कोड प्राप्त होंगे।\",\"XQFMOm\":\"छवि संपादित करें\",\"S7M0uU\":\"सूची विवरण संपादित करें\",\"cLmurE\":\"मेरी फ़ीड संपादित करें\",\"bRZ5XW\":\"मेरी प्रोफ़ाइल संपादित करें\",\"9OpVZg\":\"मेरी प्रोफ़ाइल संपादित करें\",\"QJQd1J\":\"मेरी प्रोफ़ाइल संपादित करें\",\"Jn7kox\":\"एडिट सेव्ड फीड\",\"O3oNi5\":\"ईमेल\",\"ATGYL1\":\"ईमेल\",\"pJJ0Vp\":\"ईमेल अपडेट किया गया\",\"9Qs99X\":\"ईमेल:\",\"96mted\":\"इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।\",\"9xK+YC\":\"End of feed\",\"YbIxza\":\"अपने प्रदाता का पता दर्ज करें:\",\"BfIgP6\":\"आप जिस डोमेन का उपयोग करना चाहते हैं उसे दर्ज करें\",\"cHrOqs\":\"वह ईमेल दर्ज करें जिसका उपयोग आपने अपना खाता बनाने के लिए किया था। हम आपको एक \\\"reset code\\\" भेजेंगे ताकि आप एक नया पासवर्ड सेट कर सकें।\",\"xRPn3U\":\"अपना ईमेल पता दर्ज करें\",\"+inPGm\":\"नीचे अपना नया ईमेल पता दर्ज करें।।\",\"T0KLp4\":\"अपने यूज़रनेम और पासवर्ड दर्ज करें\",\"4BITzH\":\"Error:\",\"wlzBtv\":\"Everybody\",\"0PkE20\":\"ऑल्ट टेक्स्ट\",\"/5K/KL\":\"अनुशंसित फ़ीड लोड करने में विफल\",\"4yCy8i\":\"फ़ीड ऑफ़लाइन है\",\"N0CqyO\":\"फ़ीड प्राथमिकता\",\"YirHq7\":\"प्रतिक्रिया\",\"2DoBvq\":\"सभी फ़ीड\",\"I3iUBQ\":\"सामग्री को व्यवस्थित करने के लिए उपयोगकर्ताओं द्वारा फ़ीड बनाए जाते हैं। कुछ फ़ीड चुनें जो आपको दिलचस्प लगें।\",\"2+6lmO\":\"फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए.\",\"Qzj1WT\":\"मिलते-जुलते खाते ढूँढना\",\"QKSrQV\":\"अपने मुख्य फ़ीड की स्क्रीन पर दिखाई देने वाली सामग्री को ठीक करें।।\",\"r+KeyR\":\"चर्चा धागे को ठीक-ट्यून करें।।\",\"MKEPCY\":\"फॉलो\",\"Wezu5M\":\"आरंभ करने के लिए कुछ उपयोगकर्ताओं का अनुसरण करें. आपको कौन दिलचस्प लगता है, इसके आधार पर हम आपको और अधिक उपयोगकर्ताओं की अनुशंसा कर सकते हैं।\",\"jdbMSV\":\"Followed users\",\"YY2BTA\":\"केवल वे यूजर को फ़ॉलो किया गया\",\"x5LEuB\":\"यह यूजर आपका फ़ोलो करता है\",\"NIjL2Y\":\"फोल्लोविंग\",\"y6sq5j\":\"फोल्लोविंग\",\"p3UO/y\":\"यह यूजर आपका फ़ोलो करता है\",\"5RhDkD\":\"सुरक्षा कारणों के लिए, हमें आपके ईमेल पते पर एक OTP कोड भेजने की आवश्यकता होगी।।\",\"NJPhAO\":\"सुरक्षा कारणों के लिए, आप इसे फिर से देखने में सक्षम नहीं होंगे। यदि आप इस पासवर्ड को खो देते हैं, तो आपको एक नया उत्पन्न करना होगा।।\",\"5bDfuq\":\"भूल\",\"hEPLrs\":\"पासवर्ड भूल गए\",\"dn8X5t\":\"पासवर्ड भूल गए\",\"U+kFad\":\"गैलरी\",\"c3b0B0\":\"प्रारंभ करें\",\"CKyk7Q\":\"वापस जाओ\",\"sr0UJD\":\"वापस जाओ\",\"Rtp0y7\":\"अगला\",\"Nf7oXL\":\"हैंडल\",\"c3XJ18\":\"सहायता\",\"uX/4+/\":\"यहां आपका ऐप पासवर्ड है.\",\"vLyv1R\":\"इसे छिपाएं\",\"qdOx2q\":\"उपयोगकर्ता सूची छुपाएँ\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"FynkM2\":\"Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"wkCNhr\":\"Hmm, we're having trouble finding this feed. It may have been deleted.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"होम फीड\",\"sXZ8IU\":\"होम फ़ीड प्राथमिकताएं\",\"yt7fhu\":\"होस्टिंग प्रदाता\",\"s2xA6t\":\"होस्टिंग प्रदाता पता\",\"o+axy6\":\"मेरे पास एक OTP कोड है\",\"wey2os\":\"मेरे पास अपना डोमेन है\",\"WlEcKr\":\"यदि किसी को चुना जाता है, तो सभी उम्र के लिए उपयुक्त है।।\",\"VCk0rR\":\"छवि alt पाठ\",\"STGpNQ\":\"छवि विकल्प\",\"6o7+En\":\"आपके नेटवर्क में\",\"dSKHAa\":\"अवैध उपयोगकर्ता नाम या पासवर्ड\",\"MFKlMB\":\"आमंत्रण भेजो\",\"F5MZVk\":\"एक दोस्त को आमंत्रित करें\",\"6KlkHI\":\"आमंत्रण कोड\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"UY2916\":[\"Invite codes: \",[\"invitesAvailable\"],\" available\"],\"F75w8j\":\"प्रतीक्षा सूची में शामिल हों\",\"6iVTdm\":\"प्रतीक्षा सूची में शामिल हों।।\",\"SNzppu\":\"वेटरलिस्ट में शामिल हों\",\"Dcq5kL\":\"अपनी भाषा चुने\",\"pVhZHk\":\"भाषा सेटिंग्स\",\"GAmD3h\":\"भाषा\",\"NgeSlx\":\"अधिक जानें\",\"rj0Lke\":\"इस चेतावनी के बारे में अधिक जानें\",\"lvYkpV\":\"Learn more about what is public on Bluesky.\",\"kq2ga7\":\"उन्हें किसी भी भाषा को देखने के लिए अनचेक छोड़ दें।।\",\"QfDITI\":\"लीविंग Bluesky\",\"Esfg1M\":\"चलो अपना पासवर्ड रीसेट करें!\",\"exYcTF\":\"चित्र पुस्तकालय\",\"1njn7W\":\"लाइट मोड\",\"BvSY1i\":\"इस फ़ीड को लाइक करो\",\"8/ALSr\":\"इन यूजर ने लाइक किया है\",\"zZOZj7\":\"Likes\",\"KGL/DU\":\"Limit the visibility of my account\",\"AUSVsF\":\"Limit the visibility of my account to logged-out users\",\"FuZWua\":\"सूची अवतार\",\"8mjA4F\":\"सूची का नाम\",\"h16FyT\":\"सूची\",\"ujW4FW\":\"अधिक पोस्ट लोड करें\",\"7EHsGr\":\"नई सूचनाएं लोड करें\",\"VkLESX\":\"नई पोस्ट लोड करें\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"स्थानीय देव सर्वर\",\"5Aq6mk\":\"Logged-out users\",\"w2yNjr\":\"Logged-out visibility\",\"cR9UpQ\":\"उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"यह सुनिश्चित करने के लिए कि आप कहाँ जाना चाहते हैं!\",\"xYilR2\":\"Media\",\"S9V0C/\":\"mentioned users\",\"31/84x\":\"Mentioned users\",\"zucql+\":\"मेनू\",\"kTQnAw\":\"Message from server\",\"DzmsLV\":\"मॉडरेशन\",\"NTIbv4\":\"मॉडरेशन सूचियाँ\",\"3j2OjF\":\"Moderation Lists\",\"FIJUJb\":\"अधिक फ़ीड\",\"3Siwmw\":\"अधिक विकल्प\",\"Y17r45\":\"पोस्ट विकल्प\",\"RA1KUZ\":\"खाता म्यूट करें\",\"du0opt\":\"खातों को म्यूट करें\",\"25PHAB\":\"Mute list\",\"izOxJM\":\"इन खातों को म्यूट करें?\",\"jq7SjD\":\"थ्रेड म्यूट करें\",\"s22grX\":\"म्यूट किए गए खाते\",\"qUa+lV\":\"म्यूट किए गए खाते\",\"gA0D9A\":\"म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं.\",\"1QJzM7\":\"म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।\",\"qhwV2C\":\"My Account\",\"Mysqyf\":\"जन्मदिन\",\"6MBNS/\":\"मेरी फ़ीड\",\"hKtWk2\":\"मेरी प्रोफाइल\",\"Ha6iBv\":\"मेरी फ़ीड\",\"6YtxFj\":\"नाम\",\"8yolS6\":\"अपने फ़ॉलोअर्स और डेटा तक पहुंच कभी न खोएं।\",\"isRobC\":\"नया\",\"2B7HLH\":\"नई पोस्ट\",\"FGrimz\":\"नई पोस्ट\",\"hXzOVo\":\"अगला\",\"EatZYJ\":\"अगली फोटो\",\"1UzENP\":\"नहीं\",\"flmDTf\":\"कोई विवरण नहीं\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"\\\"\",[\"query\"],\"\\\" के लिए कोई परिणाम नहीं मिला\"],\"kA9DpB\":[[\"0\"],\" के लिए कोई परिणाम नहीं मिला\"],\"SVF205\":[\"No results found for \",[\"query\"]],\"xpF9po\":\"Nobody\",\"ispbnl\":\"लागू नहीं\",\"iyUCYw\":\"लागू नहीं।\",\"ACqM3c\":\"Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users.\",\"+lYa0i\":\"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.\",\"OdiASL\":\"Note: Third-party apps that display Bluesky content may not respect this setting.\",\"iDNBZe\":\"सूचनाएं\",\"5GGAqz\":\"अरे नहीं!\",\"UaXeX3\":\"ठीक है\",\"Cqo2D+\":\"एक या अधिक छवियाँ alt पाठ याद आती हैं।।\",\"Kq2/SU\":[\"Only \",[\"0\"],\" can reply.\"],\"M/Q2aG\":\"ओपन नेविगेशन\",\"M5PuNq\":\"भाषा सेटिंग्स खोलें\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"कस्टम डोमेन का उपयोग करने के लिए मोडल खोलें\",\"vYwHHI\":\"मॉडरेशन सेटिंग्स खोलें\",\"0tHyB7\":\"सभी बचाया फ़ीड के साथ स्क्रीन खोलें\",\"nmRoY/\":\"ऐप पासवर्ड सेटिंग पेज खोलें\",\"6e9Apv\":\"होम फीड वरीयताओं को खोलता है\",\"O87Dr/\":\"स्टोरीबुक पेज खोलें\",\"G+PVmg\":\"सिस्टम लॉग पेज खोलें\",\"Jqb7sy\":\"धागे वरीयताओं को खोलता है\",\"b22AVl\":\"अन्य खाता\",\"n+HLOP\":\"अन्य सेवा\",\"1PKxQ7\":\"अन्य..।\",\"8F1i42\":\"पृष्ठ नहीं मिला\",\"8ZsakT\":\"पासवर्ड\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"पासवर्ड अद्यतन!\",\"VeZE5Q\":\"चित्र वयस्कों के लिए थे।।\",\"zgoxy5\":\"पिन किया गया फ़ीड\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"इसे बदलने से पहले कृपया अपने ईमेल की पुष्टि करें। यह एक अस्थायी आवश्यकता है जबकि ईमेल-अपडेटिंग टूल जोड़ा जाता है, और इसे जल्द ही हटा दिया जाएगा।।\",\"9qpQ5O\":\"कृपया इस ऐप पासवर्ड के लिए एक अद्वितीय नाम दर्ज करें या हमारे यादृच्छिक रूप से उत्पन्न एक का उपयोग करें।।\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"कृपया अपना पासवर्ड भी दर्ज करें:\",\"d7tryi\":\"Please tell us why you think this decision was incorrect.\",\"y28hnO\":\"पोस्ट\",\"h5RcXU\":\"छुपा पोस्ट\",\"r5zLS0\":\"पोस्ट भाषा\",\"AzCucI\":\"पोस्ट भाषा\",\"tJFPmV\":\"पोस्ट नहीं मिला\",\"+owNNn\":\"Posts\",\"0+DQbr\":\"शायद एक भ्रामक लिंक\",\"MHk+7g\":\"पिछली छवि\",\"HeBcM5\":\"प्राथमिक भाषा\",\"x8iR7V\":\"अपने फ़ॉलोअर्स को प्राथमिकता दें\",\"rjGI/Q\":\"गोपनीयता\",\"LcET2C\":\"गोपनीयता नीति\",\"k1ifdL\":\"प्रसंस्करण...\",\"vERlcd\":\"प्रोफ़ाइल\",\"MrgqOW\":\"अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।\",\"9nSV9I\":\"Public, shareable lists of users to mute or block in bulk.\",\"p1UmBX\":\"सार्वजनिक, साझा करने योग्य सूचियाँ जो फ़ीड चला सकती हैं।\",\"8HFFRQ\":\"कोटे पोस्ट\",\"+KrAHa\":\"कोटे पोस्ट\",\"WlWsdE\":\"अनुपात\",\"WEYdDv\":\"अनुशंसित\",\"QNzcT3\":\"अनुशंसित फ़ीड\",\"41UoJb\":\"अनुशंसित लोग\",\"t/YqKh\":\"निकालें\",\"p/cRzf\":[\"मेरे फ़ीड से \",[\"0\"],\" हटाएं?\"],\"1O32oy\":\"खाता हटाएं\",\"W44VX5\":\"फ़ीड हटाएँ\",\"Yy3FzB\":\"मेरे फ़ीड से हटाएँ\",\"5ywtDz\":\"छवि निकालें\",\"Dw/XUh\":\"छवि पूर्वावलोकन निकालें\",\"3fdNAy\":\"Remove this feed from my feeds?\",\"TbDEfs\":\"इस फ़ीड को सहेजे गए फ़ीड से हटा दें?\",\"Obm5+c\":\"Removed from list\",\"N8UzTV\":\"Replies\",\"oQPadq\":\"Replies to this thread are disabled\",\"Veu9gK\":\"फिल्टर\",\"lQWbAr\":[\"रिपोर्ट \",[\"collectionName\"]],\"bDHSjj\":\"रिपोर्ट\",\"NKmI9f\":\"रिपोर्ट फ़ीड\",\"6iwm2r\":\"रिपोर्ट सूची\",\"6IcSvC\":\"रिपोर्ट पोस्ट\",\"mkude1\":\"पुन: पोस्ट\",\"JOV5dR\":\"पोस्ट दोबारा पोस्ट करें या उद्धृत करे\",\"0zb9FX\":\"द्वारा दोबारा पोस्ट किया गया\",\"bqG37Z\":\"अनुरोध बदलें\",\"pJoi/P\":\"Request to limit the visibility of my account\",\"2d9VrZ\":\"पोस्ट करने से पहले वैकल्पिक टेक्स्ट की आवश्यकता है\",\"8XIT+P\":\"इस प्रदाता के लिए आवश्यक\",\"vJgYMA\":\"कोड रीसेट करें\",\"xEL92I\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"RfwZxd\":\"पासवर्ड रीसेट\",\"bee/Fw\":\"प्राथमिकताओं को रीसेट करें\",\"wToeoz\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"nIU7qI\":\"प्राथमिकताओं की स्थिति को रीसेट करें\",\"6gRgw8\":\"फिर से कोशिश करो\",\"hAbYQa\":\"हैंडल बदलना फिर से कोशिश करो\",\"tfDRzk\":\"सेव करो\",\"KV2YQQ\":\"सेव ऑल्ट टेक्स्ट\",\"y3aU20\":\"बदलाव सेव करो\",\"IUwGEM\":\"बदलाव सेव करो\",\"Xs07Tg\":\"बदलाव सेव करो\",\"BckA7m\":\"फोटो बदलाव सेव करो\",\"+K+JDj\":\"सहेजे गए फ़ीड\",\"A1taO8\":\"खोज\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"सुरक्षा चरण आवश्यक\",\"cNzyJW\":\"आगे क्या है\",\"L5sM7N\":\"Bluesky Social का चयन करें\",\"o3dwub\":\"मौजूदा खाते से चुनें\",\"GGw2AK\":\"सेवा चुनें\",\"vECNLO\":\"चुनें कि आप अपनी सदस्यता वाली फ़ीड में कौन सी भाषाएँ शामिल करना चाहते हैं। यदि कोई भी चयनित नहीं है, तो सभी भाषाएँ दिखाई जाएंगी।\",\"m5aabx\":\"ऐप में प्रदर्शित होने वाले डिफ़ॉल्ट टेक्स्ट के लिए अपनी ऐप भाषा चुनें\",\"TiiOza\":\"अपने फ़ीड में अनुवाद के लिए अपनी पसंदीदा भाषा चुनें।\",\"vp9yIB\":\"पुष्टिकरण ईमेल भेजें\",\"65dxv8\":\"ईमेल भेजें\",\"i/TzEU\":\"ईमेल भेजें\",\"RoafuO\":\"प्रतिक्रिया भेजें\",\"4cijjm\":\"रिपोर्ट भेजें\",\"V/e7nf\":\"नया पासवर्ड सेट करें\",\"gwsie4\":\"अपने फ़ीड से सभी उद्धरण पदों को छिपाने के लिए इस सेटिंग को \\\"नहीं\\\" में सेट करें। Reposts अभी भी दिखाई देगा।।\",\"IZjC3J\":\"इस सेटिंग को अपने फ़ीड से सभी उत्तरों को छिपाने के लिए \\\"नहीं\\\" पर सेट करें।।\",\"KIgU3l\":\"इस सेटिंग को अपने फ़ीड से सभी पोस्ट छिपाने के लिए \\\"नहीं\\\" करने के लिए सेट करें।।\",\"zaAyrz\":\"इस सेटिंग को \\\"हाँ\\\" में सेट करने के लिए एक थ्रेडेड व्यू में जवाब दिखाने के लिए। यह एक प्रयोगात्मक विशेषता है।।\",\"fQV2eE\":\"इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \\\"हाँ\\\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।\",\"Tz0i8g\":\"सेटिंग्स\",\"HfWHhJ\":\"यौन गतिविधि या कामुक नग्नता।।\",\"Z8lGw6\":\"शेयर\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"लिंक शेयर करें\",\"8vETh9\":\"दिखाओ\",\"aWAdCb\":\"दिखाओ\",\"NijgXr\":\"मेरी फीड से पोस्ट दिखाएं\",\"T3Mt8m\":\"उद्धरण पोस्ट दिखाओ\",\"BlW8X/\":\"उत्तर दिखाएँ\",\"X4GwDb\":\"अन्य सभी उत्तरों से पहले उन लोगों के उत्तर दिखाएं जिन्हें आप फ़ॉलो करते हैं।\",\"GiogzH\":\"रीपोस्ट दिखाएँ\",\"fhY/fL\":\"लोग दिखाएँ\",\"5lWFkC\":\"साइन इन करें\",\"n1ekoW\":\"साइन इन करें\",\"N9o7n5\":[[\"0\"],\" के रूप में साइन इन करें\"],\"FT1MVS\":\"... के रूप में साइन इन करें\",\"+UpfFC\":\"साइन इन करें\",\"fcWrnU\":\"साइन आउट\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"आपने इस रूप में साइन इन करा है:\",\"6Uau97\":\"स्किप\",\"0o5BFH\":\"उत्तर क्रमबद्ध करें\",\"GH1Rgk\":\"उसी पोस्ट के उत्तरों को इस प्रकार क्रमबद्ध करें:\",\"1DA6ap\":\"स्क्वायर\",\"aKEHLj\":\"स्टेजिंग\",\"tgEXwM\":\"स्थिति पृष्ठ\",\"P5jja7\":\"Storybook\",\"hQRttt\":\"Submit\",\"EDl9kS\":\"सब्सक्राइब\",\"5z3ICN\":\"इस सूची को सब्सक्राइब करें\",\"TVFyMD\":\"अनुशंसित लोग\",\"XYLcNv\":\"सहायता\",\"VjWeLI\":\"खाते बदलें\",\"D+NlUC\":\"प्रणाली\",\"fP8jTZ\":\"सिस्टम लॉग\",\"HF6Iah\":\"लंबा\",\"4Y5H+g\":\"शर्तें\",\"xowcRf\":\"सेवा की शर्तें\",\"p8Iz39\":\"पाठ इनपुट फ़ील्ड\",\"GlPXQJ\":\"अनब्लॉक करने के बाद अकाउंट आपसे इंटरैक्ट कर सकेगा।\",\"o4M2MP\":\"सामुदायिक दिशानिर्देशों को <0/> पर स्थानांतरित कर दिया गया है\",\"U42lKc\":\"कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है\",\"G4EksE\":\"हो सकता है कि यह पोस्ट हटा दी गई हो।\",\"WNR9db\":\"गोपनीयता नीति को <0/> पर स्थानांतरित किया गया है\",\"LbEbIk\":[\"समर्थन प्रपत्र स्थानांतरित कर दिया गया है. यदि आपको सहायता की आवश्यकता है, तो कृपया<0/> या हमसे संपर्क करने के लिए \",[\"HELP_DESK_URL\"],\" पर जाएं।\"],\"FGbRSr\":\"सेवा की शर्तों को स्थानांतरित कर दिया गया है\",\"yUqcy2\":\"एप्लिकेशन में एक अप्रत्याशित समस्या थी. कृपया हमें बताएं कि क्या आपके साथ ऐसा हुआ है!\",\"jSe8k/\":[\"This \",[\"0\"],\" has been labeled.\"],\"KRYn8w\":[\"यह \",[\"screenDescription\"],\" फ्लैग किया गया है:\"],\"aBX1qv\":\"This content is not viewable without a Bluesky account.\",\"xI4xW5\":\"This feed is currently receiving high traffic and is temporarily unavailable. Please try again later.\",\"lm845B\":\"यह जानकारी अन्य उपयोगकर्ताओं के साथ साझा नहीं की जाती है।।\",\"5Pvw/O\":\"अगर आपको कभी अपना ईमेल बदलने या पासवर्ड रीसेट करने की आवश्यकता है तो यह महत्वपूर्ण है।।\",\"sQQfZ9\":\"यह वह सेवा है जो आपको ऑनलाइन रखता है।।\",\"CvX8qs\":\"यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:\",\"WKrUVy\":\"इस पोस्ट को हटा दिया गया है।।\",\"qpCA5s\":\"यह चेतावनी केवल मीडिया संलग्न पोस्ट के लिए उपलब्ध है।\",\"u9ThjD\":\"थ्रेड प्राथमिकता\",\"zmXsk5\":\"थ्रेड मोड\",\"1x30Qt\":\"ड्रॉपडाउन टॉगल करें\",\"KFXQEt\":\"परिवर्तन\",\"pi8x/S\":\"अनुवाद\",\"KDw4GX\":\"फिर से कोशिश करो\",\"RF3/jE\":\"Un-block list\",\"+/SGK9\":\"Un-mute list\",\"nc4Wfd\":\"आपकी सेवा से संपर्क करने में असमर्थ। कृपया अपने इंटरनेट कनेक्शन की जांच करें।।\",\"tuS5Jz\":\"अनब्लॉक\",\"0VrZZv\":\"अनब्लॉक खाता\",\"6pYY4t\":\"पुनः पोस्ट पूर्ववत करें\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"अनम्यूट खाता\",\"s12/Py\":\"थ्रेड को अनम्यूट करें\",\"EvGmWj\":\"Unpin moderation list\",\"vaz2uI\":[\"सूची में \",[\"displayName\"],\" अद्यतन करें\"],\"YXMY4w\":\"उपलब्ध अद्यतन\",\"RXbEvi\":\"अद्यतन..।\",\"Vwkfp4\":\"एक पाठ फ़ाइल अपलोड करने के लिए:\",\"jTdnU6\":\"अपने खाते या पासवर्ड को पूर्ण एक्सेस देने के बिना अन्य ब्लूस्की ग्राहकों को लॉगिन करने के लिए ऐप पासवर्ड का उपयोग करें।।\",\"CH1am9\":\"डिफ़ॉल्ट प्रदाता का उपयोग करें\",\"ZG8UvP\":\"अपने हैंडल के साथ दूसरे ऐप में साइन इन करने के लिए इसका उपयोग करें।\",\"cKXwwI\":\"के द्वारा उपयोग:\",\"t4Yp4Z\":\"यूजर हैंडल\",\"8tsrUV\":\"लोग सूचियाँ\",\"nZx9mr\":\"यूजर नाम या ईमेल पता\",\"Sxm8rQ\":\"यूजर लोग\",\"Hbhyg2\":\"users followed by <0/>\",\"1Z9Mdf\":\"Users followed by <0/>\",\"9k1aoj\":[\"Users in \\\"\",[\"0\"],\"\\\"\"],\"MBOY4U\":\"ईमेल सत्यापित करें\",\"Ejyv0o\":\"मेरी ईमेल सत्यापित करें\",\"9czCrB\":\"मेरी ईमेल सत्यापित करें\",\"ibSVGR\":\"नया ईमेल सत्यापित करें\",\"nHsQde\":\"डीबग प्रविष्टि देखें\",\"47jzzd\":\"अवतार देखें\",\"wK4H1r\":\"साइट पर जाएं\",\"qjBGxf\":\"हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"2iYPLH\":\"We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"हम क्षमा चाहते हैं! हमें वह पेज नहीं मिल रहा जिसे आप ढूंढ रहे थे।\",\"meB+tZ\":\"<0>Bluesky में आपका स्वागत है\",\"Mj7rl/\":[\"इस \",[\"collectionName\"],\" के साथ क्या मुद्दा है?\"],\"3qn29J\":\"इस पोस्ट में किस भाषा का उपयोग किया जाता है?\",\"uawiGa\":\"कौन से भाषाएं आपको अपने एल्गोरिदमिक फ़ीड में देखना पसंद करती हैं?\",\"yvDWMs\":\"Who can reply\",\"GKc8LT\":\"Who can reply?\",\"I5S9ZE\":\"चौड़ा\",\"y02THm\":\"पोस्ट लिखो\",\"6ckZRB\":\"अपना जवाब दें\",\"l75CjT\":\"हाँ\",\"STPj0e\":\"आप किसी भी समय होस्टिंग प्रदाताओं को बदल सकते हैं।।\",\"67nRLM\":\"अब आप अपने नए पासवर्ड के साथ साइन इन कर सकते हैं।।\",\"lIcbCU\":\"आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।\",\"aFZZYi\":\"आपके पास कोई पिन किया हुआ फ़ीड नहीं है.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"आपके पास कोई सहेजी गई फ़ीड नहीं है.\",\"RkXibf\":\"आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।\",\"CbrOgr\":\"You have no feeds.\",\"tCLJ9E\":\"आपके पास कोई सूची नहीं है।।\",\"soH9qC\":\"आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता ब्लॉक करें\\\" चुनें।\",\"NDgp3i\":\"आपने अभी तक कोई ऐप पासवर्ड नहीं बनाया है। आप नीचे बटन दबाकर एक बना सकते हैं।।\",\"grqdXb\":\"आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता म्यूट करें\\\" चुनें।\",\"RrDyEb\":\"आपको \\\"reset code\\\" के साथ एक ईमेल प्राप्त होगा। उस कोड को यहाँ दर्ज करें, फिर अपना नया पासवर्ड दर्ज करें।।\",\"gdRnT7\":\"आपका खाता\",\"k7hmsH\":\"जन्म तिथि\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"आपका ईमेल बचाया गया है! हम जल्द ही संपर्क में रहेंगे।।\",\"z2L+/9\":\"आपका ईमेल अद्यतन किया गया है लेकिन सत्यापित नहीं किया गया है। अगले चरण के रूप में, कृपया अपना नया ईमेल सत्यापित करें।।\",\"XZlIVw\":\"आपका ईमेल अभी तक सत्यापित नहीं हुआ है। यह एक महत्वपूर्ण सुरक्षा कदम है जिसे हम अनुशंसा करते हैं।।\",\"qv9f4I\":\"आपका पूरा हैंडल होगा\",\"lvcqqG\":\"आपका होस्टिंग प्रदाता\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।\",\"okRPtW\":\"आपकी प्रोफ़ाइल\",\"rsWkoR\":\"Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private.\",\"jjscPy\":\"Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private.\",\"ogY7EU\":\"Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in.\",\"MvWO9d\":\"आपका यूजर हैंडल\"}")}; \ No newline at end of file diff --git a/src/locale/locales/ja/messages.js b/src/locale/locales/ja/messages.js new file mode 100644 index 00000000..ccfd315f --- /dev/null +++ b/src/locale/locales/ja/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:JSON.parse("{\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" リスト\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"OyEWua\":[[\"invitesAvailable\"],\" invite code available\"],\"eFIdHP\":[[\"invitesAvailable\"],\" invite codes available\"],\"wapGcj\":[[\"message\"]],\"umrH9L\":\"<0/> members\",\"gMjqbV\":\"<1>推奨<2>フィード<0>を選択\",\"F657la\":\"<1>推奨<2>ユーザー<0>をフォロー\",\"XCTqGE\":\"新しいバージョンのアプリが利用可能です。アプリを継続して使用するにはアップデートしてください。\",\"AnNF5e\":\"アクセシビリティ\",\"AeXO77\":\"アカウント\",\"4WY4MD\":\"アカウントオプション\",\"m16xKo\":\"追加\",\"fBBX+K\":\"コンテンツ警告を追加\",\"JU3hs2\":\"リストにユーザーを追加\",\"MPPZ54\":\"アカウントを追加\",\"LkA8jz\":\"ALTテキストを追加\",\"Z8idyM\":\"詳細を追加\",\"AoXl11\":\"レポートに詳細を追加\",\"iE6B/9\":\"リンクカードを追加\",\"EXHdP1\":\"リンクカードの追加:\",\"x6laaL\":\"次のDNSレコードをドメインに追加してください:\",\"UmzMP4\":\"リストに追加\",\"hCrQ0L\":\"マイフィードに追加\",\"GluCXm\":\"リストに追加\",\"jRrQFe\":\"返信がフィードに表示されるために必要な「いいね」の数を調整します。\",\"qLa52r\":\"成人向けコンテンツ\",\"sxkWRg\":\"アドバンス\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"ALTテキスト\",\"0QlT7/\":\"ALTテキストは、視覚障害者や低視力者のために画像を説明し、すべての人に文脈を与えるのに役立ちます。\",\"woXbjq\":[\"Eメールが\",[\"0\"],\"に送信されました。以下に入力できる確認コードが含まれています。\"],\"Fon2dK\":[\"以前のアドレス\",[\"0\"],\"にEメールが送信されました。以下に入力できる確認コードが含まれています。\"],\"HZFm5R\":\"および\",\"fdjKGe\":\"アプリケーション言語\",\"SMmUnj\":\"アプリパスワード\",\"8q4WlH\":\"アプリパスワード\",\"e6un1h\":\"Appeal Decision\",\"c0PCYD\":\"Appeal this decision\",\"oifO1p\":\"Appeal this decision.\",\"aAIQg2\":\"外観\",\"SSDZ+T\":[\"本当にアプリパスワード「\",[\"name\"],\"」を削除しますか?\"],\"0BIeIs\":\"本当にこの下書きを破棄しますか?\",\"6foA8n\":\"本当ですか?\",\"/mSd6b\":\"本当ですか?これは元に戻せません。\",\"EbvWd3\":\"芸術的または非エロティックなヌード。\",\"iH8pgl\":\"戻る\",\"ehOkF+\":\"基本\",\"+gCI2a\":\"誕生日\",\"pieVBA\":\"誕生日:\",\"m1dqxu\":\"アカウントのブロック\",\"ffIfdM\":\"アカウントのブロック\",\"hIysMc\":\"Block list\",\"fdYcMy\":\"これらのアカウントをブロックしますか?\",\"KWykPE\":\"ブロックされたブロック\",\"JuqQpF\":\"ブロックされたアカウント\",\"HG4qt4\":\"ブロックされたアカウントは、スレッド内で返信したり、ユーザーに言及したり、その他の方法でユーザーとやり取りすることはできません。\",\"8LNSUt\":\"ブロックされたアカウントは、スレッド内で返信したり、ユーザーに言及したり、その他の方法でユーザーとやり取りすることはできません。あなたは相手のコンテンツを見ることができず、相手はあなたのコンテンツを見ることができなくなります。\",\"HFCE4A\":\"投稿をブロックしました。\",\"zl+QbX\":\"ブロックは公開されます。ブロックされたアカウントは、スレッド内で返信したり、ユーザーに言及したり、その他の方法でユーザーとやり取りすることはできません。\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Blueskyは柔軟です。\",\"odLrdl\":\"Blueskyは開いています。\",\"/LsWK4\":\"Blueskyはオープンです。\",\"C50OGr\":\"Blueskyはより健全なコミュニティを構築するために招待状を使用します。招待状をお持ちでない方の場合、waitlistに申し込めば招待状をお送りします。\",\"u9cCQU\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"ビルドバージョン \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"カメラ\",\"JGGrPC\":\"文字、数字、スペース、ハイフン、およびアンダースコアのみを含めることができます。長さは4文字以上32文字以下である必要があります。\",\"dEgA5A\":\"キャンセル\",\"aMH9rr\":\"アカウントの削除をキャンセル\",\"kc3E4R\":\"画像のALTテキストの追加をキャンセル\",\"wg4LHQ\":\"ハンドルの変更をキャンセル\",\"hFL1Li\":\"画像の切り抜きをキャンセル\",\"tijH8t\":\"プロフィールの編集をキャンセル\",\"Qe4C/d\":\"引用投稿をキャンセル\",\"5TviPn\":\"検索をキャンセル\",\"nss3UV\":\"Waitlistの登録をキャンセル\",\"o+XJ9D\":\"変更\",\"pQco5R\":\"ハンドルを変更\",\"Q5e1U/\":\"ハンドルを変更\",\"a3NAfL\":\"Eメールの変更\",\"4vatyk\":\"Eメールを変更\",\"Yn3C90\":\"推奨フィードを確認してください。「+」をタップすればフィードに追加されます。\",\"ioZXIH\":\"推奨ユーザーを確認してください。フォローする事であなたに合ったユーザーが見つかるかもしれません。\",\"/+X+/K\":\"Eメールの受信トレイを確認して、以下に入力するコードが記載されたメールが届いていないか確認してください:\",\"Rt502e\":\"サービスを選択\",\"/L45sc\":\"カスタムフィードを使用して経験を強化するアルゴリズムを選択します。\",\"Wk8hkn\":\"パスワードを選択\",\"Us7A1O\":\"レガシーストレージデータをすべてクリア\",\"X3zEXo\":\"すべてのレガシーストレージデータをクリア(この後再起動)\",\"zxFM2c\":\"すべてのストレージデータをクリア\",\"r+lhUL\":\"すべてのストレージデータをクリア(この後再起動)\",\"QbvBNV\":\"検索クエリをクリア\",\"flH7u/\":\"アラートを閉じる\",\"hYmnbk\":\"一番下の引き出しを閉じる\",\"47L1V1\":\"画像を閉じる\",\"l49ujN\":\"画像ビューアを閉じる\",\"UryHFO\":\"ナビゲーションフッターを閉じる\",\"KHzDTk\":\"コミュニティガイドライン\",\"o8UUti\":\"返信を作成\",\"7VpPHA\":\"確認\",\"q8upsf\":\"変更を確認\",\"8pNKIr\":\"コンテンツ言語の設定を確認\",\"tGg8Kt\":\"アカウントの削除を確認\",\"ioZOzk\":\"確認コード\",\"J28zul\":\"接続中...\",\"l879p1\":\"コンテンツフィルタリング\",\"m8j6up\":\"コンテンツフィルタリング\",\"/PlAsF\":\"コンテンツ言語\",\"cogwXi\":\"コンテンツ警告\",\"FG7AQv\":\"コンテンツ警告\",\"xGVfLh\":\"続行\",\"6V3Ea3\":\"コピー済み\",\"he3ygx\":\"コピー\",\"7LTXf4\":\"Copy link to list\",\"dWsPi5\":\"Copy link to post\",\"jw+abr\":\"Copy link to profile\",\"iQgJaz\":\"投稿テキストをコピー\",\"u40k/o\":\"著作権ポリシー\",\"7wWvgo\":\"フィードのロードに失敗\",\"8NNr/O\":\"リストのロードに失敗\",\"mpt9T+\":\"新しいアカウントを作成\",\"IS0nrP\":\"アカウントを作成\",\"6HbhpU\":\"新しいアカウントを作成\",\"MXSt4t\":[\"作成済み \",[\"0\"]],\"GAD3Dx\":\"カスタムドメイン\",\"ZQKLI1\":\"危険地帯\",\"ZDGm40\":\"アカウントを削除\",\"vzX5FB\":\"アカウントを削除\",\"gUEtxf\":\"アプリパスワードを削除\",\"84uE/A\":\"リストを削除\",\"ktknoE\":\"マイアカウントを削除\",\"szz0+N\":\"マイアカウントを削除…\",\"04G5Az\":\"投稿を削除\",\"FbPNuJ\":\"この投稿を削除しますか?\",\"u+1OHY\":\"投稿を削除しました。\",\"Nu4oKW\":\"説明\",\"dacKHE\":\"開発者サーバー\",\"2ygkE8\":\"開発者ツール\",\"bzSI52\":\"破棄\",\"BryYJR\":\"ドラフトを破棄\",\"9Y7FMD\":\"Discourage apps from showing my account to logged-out users\",\"pbLwal\":\"新しいフィードを検出\",\"pfa8F0\":\"表示名\",\"0gS7M5\":\"表示名\",\"iZ5pMB\":\"ドメインを確認しました!\",\"DPfwMq\":\"完了\",\"zT97vP\":[\"完了\",[\"extraText\"]],\"4uwlSD\":\"それぞれのコードは一度ずつ動作します。定期的により多くの招待コードを受け取ります。\",\"XQFMOm\":\"画像を編集\",\"S7M0uU\":\"リストの詳細を編集\",\"cLmurE\":\"マイフィードを編集\",\"bRZ5XW\":\"マイプロフィールを編集\",\"9OpVZg\":\"プロフィールを編集\",\"QJQd1J\":\"プロフィールを編集\",\"Jn7kox\":\"保存済みフィードを編集\",\"O3oNi5\":\"Eメール\",\"ATGYL1\":\"Eメールアドレス\",\"pJJ0Vp\":\"Eメール更新\",\"9Qs99X\":\"Eメール:\",\"96mted\":\"この設定を有効にすると、フォローしているユーザー間の応答だけが表示されます。\",\"9xK+YC\":\"End of feed\",\"YbIxza\":\"プロバイダーのアドレスを入力してください:\",\"BfIgP6\":\"使用するドメインを入力\",\"cHrOqs\":\"アカウントの作成に使用したEメールを入力します。新しいパスワードを設定できるように、「リセットコード」をお送りします。\",\"xRPn3U\":\"Eメールアドレスを入力\",\"+inPGm\":\"以下に新しいメールアドレスを入力してください。\",\"T0KLp4\":\"ユーザー名とパスワードを入力\",\"4BITzH\":\"エラー:\",\"wlzBtv\":\"Everybody\",\"0PkE20\":\"ALTテキストを展開\",\"/5K/KL\":\"推奨フィードのロードに失敗\",\"4yCy8i\":\"フィードはオフライン\",\"N0CqyO\":\"フィード設定\",\"YirHq7\":\"フィードバック\",\"2DoBvq\":\"フィード\",\"I3iUBQ\":\"フィードはコンテンツを整理する為にユーザーによって作成されます。興味具かいフィードをいくつか選択してください。\",\"2+6lmO\":\"フィードはユーザーがプログラミングの専門知識を持って構築するカスタムアルゴリズムです。詳細については、<0/>を参照してください。\",\"Qzj1WT\":\"似通ったアカウントを検索中...\",\"QKSrQV\":\"ホーム画面に表示されるコンテンツを微調整します。\",\"r+KeyR\":\"ディスカッションスレッドを微調整します。\",\"MKEPCY\":\"フォロー\",\"Wezu5M\":\"いくつかのユーザーをフォローして開始します。興味を持っている人に基づいて、より多くのユーザーをお勧めできます。\",\"jdbMSV\":\"Followed users\",\"YY2BTA\":\"フォローされたユーザーのみ\",\"x5LEuB\":\"フォロワー\",\"NIjL2Y\":\"フォロー中\",\"y6sq5j\":\"フォロー中\",\"p3UO/y\":\"あなたをフォロー\",\"5RhDkD\":\"セキュリティ上の理由から、Eメールアドレスに確認コードを送信する必要があります。\",\"NJPhAO\":\"セキュリティ上の理由から、これを再度表示することはできません。このパスワードを紛失した場合は、新しいパスワードを生成する必要があります。\",\"5bDfuq\":\"失念\",\"hEPLrs\":\"パスワードを失念\",\"dn8X5t\":\"パスワードを失念\",\"U+kFad\":\"ギャラリー\",\"c3b0B0\":\"はじめに\",\"CKyk7Q\":\"戻る\",\"sr0UJD\":\"戻る\",\"Rtp0y7\":\"次へ\",\"Nf7oXL\":\"ハンドル\",\"c3XJ18\":\"ヘルプ\",\"uX/4+/\":\"アプリパスワードをお知らせします。\",\"vLyv1R\":\"非表示\",\"qdOx2q\":\"ユーザーリストを非表示にする\",\"FynkM2\":\"Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"wkCNhr\":\"Hmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"ホーム\",\"sXZ8IU\":\"ホームフィード設定\",\"yt7fhu\":\"ホスティングプロバイダー\",\"s2xA6t\":\"ホスティングプロバイダーアドレス\",\"o+axy6\":\"コードを持っている\",\"wey2os\":\"自分のドメインを持っている\",\"WlEcKr\":\"選択されていない場合は、すべての年齢に適しています。\",\"VCk0rR\":\"画像のALTテキスト\",\"STGpNQ\":\"イメージオプション\",\"dSKHAa\":\"無効なユーザー名またはパスワード\",\"MFKlMB\":\"招待\",\"F5MZVk\":\"友人を招待\",\"6KlkHI\":\"招待コード\",\"MYTV5o\":\"招待コードが確認できません。正しく入力されている事を確認し、もう一度実行してください。\",\"UY2916\":[\"Invite codes: \",[\"invitesAvailable\"],\" available\"],\"F75w8j\":\"待機リストに参加\",\"6iVTdm\":\"待機リストに参加します。\",\"SNzppu\":\"待機リストに参加\",\"Dcq5kL\":\"言語選択\",\"pVhZHk\":\"言語設定\",\"GAmD3h\":\"言語\",\"NgeSlx\":\"詳細\",\"rj0Lke\":\"この警告の詳細\",\"lvYkpV\":\"Learn more about what is public on Bluesky.\",\"kq2ga7\":\"どの言語も表示するには、すべてのチェックを外したままにします。\",\"QfDITI\":\"Blueskyから離れる\",\"Esfg1M\":\"パスワードをリセットしましょう!\",\"exYcTF\":\"ライブラリー\",\"BvSY1i\":\"このフィードをいいね\",\"8/ALSr\":\"いいねした人:\",\"zZOZj7\":\"Likes\",\"AUSVsF\":\"Limit the visibility of my account to logged-out users\",\"FuZWua\":\"リストアバター\",\"8mjA4F\":\"リスト名\",\"h16FyT\":\"リスト\",\"ujW4FW\":\"より多くの投稿をロード\",\"7EHsGr\":\"新しい通知をロード\",\"VkLESX\":\"新しい投稿をロード\",\"Z3FXyt\":\"ロード中...\",\"jl0AFf\":\"ローカル開発者サーバー\",\"5Aq6mk\":\"Logged-out users\",\"w2yNjr\":\"Logged-out visibility\",\"cR9UpQ\":\"リストにないアカウントにログイン\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"意図する場所である事を確認してください!\",\"xYilR2\":\"Media\",\"S9V0C/\":\"mentioned users\",\"31/84x\":\"Mentioned users\",\"zucql+\":\"メニュー\",\"kTQnAw\":\"Message from server\",\"DzmsLV\":\"モデレート\",\"NTIbv4\":\"モデレートリスト\",\"3j2OjF\":\"Moderation Lists\",\"FIJUJb\":\"その他のフィード\",\"3Siwmw\":\"その他のオプション\",\"RA1KUZ\":\"アカウントをミュート\",\"du0opt\":\"アカウントをミュート\",\"25PHAB\":\"Mute list\",\"izOxJM\":\"これらのアカウントをミュートしますか?\",\"jq7SjD\":\"スレッドをミュート\",\"s22grX\":\"ミュート済みアカウント\",\"qUa+lV\":\"ミュート済みアカウント\",\"gA0D9A\":\"ミュート済みのアカウントは、フィードと通知からの投稿が削除されます。ミュート設定は知られることはありません。\",\"1QJzM7\":\"ミュートはプライベートです。ミュート済みアカウントはユーザーと相互作用することができますが、そのアカウントの投稿や通知を受信することはできません。\",\"Mysqyf\":\"誕生日\",\"6MBNS/\":\"マイフィード\",\"hKtWk2\":\"マイプロフィール\",\"Ha6iBv\":\"保存済みフィード\",\"6YtxFj\":\"名前\",\"8yolS6\":\"決してフォロワーやデータへのアクセスを失わないでください。\",\"isRobC\":\"新規\",\"2B7HLH\":\"新しい投稿\",\"FGrimz\":\"新しい投稿\",\"hXzOVo\":\"次へ\",\"EatZYJ\":\"次の画像\",\"1UzENP\":\"なし\",\"flmDTf\":\"説明なし\",\"zfN9gJ\":\"結果なし\",\"fOlAiK\":[\"「\\\\\",[\"query\"],\"」の検索結果がない\"],\"SVF205\":[\"\\\\\",[\"query\"],\"の検索結果がない\"],\"xpF9po\":\"Nobody\",\"iyUCYw\":\"該当なし。\",\"ACqM3c\":\"Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users.\",\"+lYa0i\":\"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.\",\"iDNBZe\":\"通知\",\"5GGAqz\":\"ちょっと!\",\"UaXeX3\":\"OK\",\"Cqo2D+\":\"1つ以上の画像にALTテキストがありません。\",\"Kq2/SU\":[\"Only \",[\"0\"],\" can reply.\"],\"M/Q2aG\":\"ナビゲーションを開く\",\"M5PuNq\":\"構成可能な言語設定を開く\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"カスタムドメインを使用するためのモーダルを開く\",\"vYwHHI\":\"モデレート設定を開く\",\"0tHyB7\":\"保存されたすべてのフィードで画面を開く\",\"nmRoY/\":\"アプリのパスワード設定ページを開く\",\"6e9Apv\":\"ホームフィード設定を開きます\",\"O87Dr/\":\"ストーリーブックのページを開く\",\"G+PVmg\":\"システムログのページを開く\",\"Jqb7sy\":\"スレッド設定を開きます\",\"b22AVl\":\"その他のアカウント\",\"n+HLOP\":\"その他のサービス\",\"1PKxQ7\":\"その他...\",\"8F1i42\":\"ページが見つからない\",\"8ZsakT\":\"パスワード\",\"ogtYkT\":\"パスワードが更新された\",\"DKeVgZ\":\"パスワードが更新されました!\",\"VeZE5Q\":\"写真は成人向けです。\",\"zgoxy5\":\"ピン接続フィード\",\"Aw5fOC\":\"ハンドルをお選びください。\",\"5vI4sE\":\"パスワードを選択してください。\",\"Apyknf\":\"変更する前にメールを確認してください。これは、Eメールアップデートツールが追加されている間の一時的な要件であり、まもなく削除されます。\",\"9qpQ5O\":\"このアプリパスワードに固有の名前を入力するか、ランダムに生成された名前を使用してください。\",\"hV+cYN\":\"Eメールを入力してください。\",\"QJr5Xp\":\"パスワードも入力してください:\",\"d7tryi\":\"Please tell us why you think this decision was incorrect.\",\"y28hnO\":\"投稿\",\"h5RcXU\":\"投稿非表示\",\"r5zLS0\":\"ポスト言語\",\"AzCucI\":\"投稿言語\",\"tJFPmV\":\"投稿が見つからない\",\"+owNNn\":\"Posts\",\"0+DQbr\":\"誤解を招く可能性のあるリンク\",\"MHk+7g\":\"前の画像\",\"HeBcM5\":\"第一言語\",\"x8iR7V\":\"フォローの優先順位付け\",\"rjGI/Q\":\"プライバシー\",\"LcET2C\":\"プライバシーポリシー\",\"k1ifdL\":\"処理中...\",\"vERlcd\":\"プロフィール\",\"MrgqOW\":\"Eメールを確認してアカウントを保護します。\",\"9nSV9I\":\"Public, shareable lists of users to mute or block in bulk.\",\"p1UmBX\":\"フィードを駆動できるパブリックで共有可能なリスト。\",\"8HFFRQ\":\"引用投稿\",\"+KrAHa\":\"引用投稿\",\"WlWsdE\":\"比率\",\"QNzcT3\":\"推奨フィード\",\"41UoJb\":\"推奨ユーザー\",\"t/YqKh\":\"削除\",\"p/cRzf\":[\"マイフィードから\",[\"0\"],\"を削除しますか?\"],\"1O32oy\":\"アカウントを削除\",\"W44VX5\":\"フィードを削除\",\"Yy3FzB\":\"マイフィードから削除\",\"5ywtDz\":\"イメージを削除\",\"Dw/XUh\":\"イメージプレビューを削除\",\"3fdNAy\":\"Remove this feed from my feeds?\",\"TbDEfs\":\"保存したフィードからこのフィードを削除しますか?\",\"Obm5+c\":\"リストから削除された\",\"N8UzTV\":\"Replies\",\"oQPadq\":\"Replies to this thread are disabled\",\"Veu9gK\":\"返信フィルター\",\"lQWbAr\":[\"レポート \\\\\",[\"collectionName\"]],\"bDHSjj\":\"レポートアカウント\",\"NKmI9f\":\"レポートフィード\",\"6iwm2r\":\"レポートリスト\",\"6IcSvC\":\"レポート投稿\",\"mkude1\":\"再投稿\",\"JOV5dR\":\"再投稿または引用投稿\",\"0zb9FX\":\"再投稿者\",\"bqG37Z\":\"変更を要求\",\"8XIT+P\":\"このプロバイダーに必要\",\"vJgYMA\":\"コードをリセット\",\"xEL92I\":\"オンボード状態をリセット\",\"RfwZxd\":\"パスワードをリセット\",\"bee/Fw\":\"設定をリセット\",\"wToeoz\":\"オンボード状態をリセット\",\"nIU7qI\":\"設定状態をリセット\",\"6gRgw8\":\"再試行\",\"tfDRzk\":\"保存\",\"KV2YQQ\":\"ALTテキストを保存\",\"IUwGEM\":\"変更を保存\",\"Xs07Tg\":\"ハンドルの変更を保存\",\"BckA7m\":\"画像の切り抜きを保存\",\"+K+JDj\":\"保存済みフィード\",\"A1taO8\":\"検索\",\"BF8cu3\":\"投稿とユーザーを検索します。\",\"CKROFy\":\"必要なセキュリティ手順\",\"cNzyJW\":\"次を見る\",\"L5sM7N\":\"Bluesky Socialを選択\",\"o3dwub\":\"既存のアカウントから選択\",\"GGw2AK\":\"サービスを選択\",\"vECNLO\":\"登録済みフィードに含める言語を選択します。選択されていない場合は、すべての言語が表示されます。\",\"m5aabx\":\"アプリに表示するデフォルトのテキストのアプリ言語を選択する\",\"TiiOza\":\"フィード内の翻訳に使用する言語を選択します。\",\"vp9yIB\":\"確認Eメールを送信\",\"65dxv8\":\"Eメールを送信\",\"i/TzEU\":\"Eメールを送信\",\"RoafuO\":\"フィードバックを送信\",\"4cijjm\":\"レポートを送信\",\"V/e7nf\":\"新しいパスワードを設定\",\"gwsie4\":\"フィードから全ての引用投稿を非表示にするには、この設定を「いいえ」にします。再投稿は引き続き表示されます。\",\"IZjC3J\":\"フィードから全ての返信を非表示にするには、この設定を「いいえ」にします。\",\"KIgU3l\":\"フィードから全ての再投稿を非表示にするには、この設定を「いいえ」にします。\",\"zaAyrz\":\"スレッド表示で返信を表示するには、この設定を「はい」にします。これは実験的な機能です。\",\"fQV2eE\":\"保存したフィードのサンプルを次のフィードに表示するには、この設定を「はい」にします。これは実験的な機能です。\",\"Tz0i8g\":\"設定\",\"HfWHhJ\":\"性行為またはエロティックなヌード。\",\"Z8lGw6\":\"共有\",\"P33tEA\":\"フィードを共有\",\"8vETh9\":\"表示\",\"aWAdCb\":\"とにかく表示\",\"NijgXr\":\"マイフィードからの投稿を表示\",\"T3Mt8m\":\"引用投稿を表示\",\"BlW8X/\":\"返信を表示\",\"X4GwDb\":\"他のすべての返信の前に、フォローしている人からの返信を表示します。\",\"GiogzH\":\"再投稿を表示\",\"fhY/fL\":\"ユーザーを表示\",\"5lWFkC\":\"サインイン\",\"n1ekoW\":\"サインイン\",\"N9o7n5\":[[\"0\"],\"としてサインイン\"],\"FT1MVS\":\"...としてサインイン\",\"+UpfFC\":\"サインイン\",\"fcWrnU\":\"サインアウト\",\"e+RpCP\":\"サインアップ\",\"MiE4Vp\":\"登録またはログインして会話に参加する\",\"zU+Ro7\":\"サインイン済み\",\"6Uau97\":\"スキップ\",\"0o5BFH\":\"返信を並び替える\",\"GH1Rgk\":\"次の方法で同じ投稿への返信を並び替えます。\",\"1DA6ap\":\"正方形\",\"aKEHLj\":\"ステージング\",\"tgEXwM\":\"ステータスページ\",\"P5jja7\":\"ストーリーブック\",\"hQRttt\":\"Submit\",\"EDl9kS\":\"登録\",\"5z3ICN\":\"このリストに登録\",\"TVFyMD\":\"推奨されるフォロー\",\"XYLcNv\":\"サポート\",\"VjWeLI\":\"アカウントを切り替える\",\"fP8jTZ\":\"システムログ\",\"HF6Iah\":\"トール\",\"4Y5H+g\":\"条件\",\"xowcRf\":\"利用規約\",\"p8Iz39\":\"テキスト入力フィールド\",\"GlPXQJ\":\"このアカウントは、ブロック解除後にお客様とやり取りすることができます。\",\"o4M2MP\":\"コミュニティ ガイドラインが<0/>に移動された\",\"U42lKc\":\"著作権ポリシーが<0/>に移動された\",\"G4EksE\":\"投稿が削除された可能性があります。\",\"WNR9db\":\"プライバシーポリシーが<0/>に移動された\",\"LbEbIk\":[\"サポートフォームが移動しました。サポートが必要な場合は、<0/>または\\\\\",[\"HELP_DESK_URL\"],\"にアクセスしてご連絡ください。\"],\"FGbRSr\":\"サービス規約が移動された\",\"yUqcy2\":\"アプリケーションに予期しない問題が発生しました。このようなことがありましたらお知らせください!\",\"jSe8k/\":[\"This \",[\"0\"],\" has been labeled.\"],\"KRYn8w\":[\"この\\\\\",[\"screenDescription\"],\"にはフラグが設定されています。\"],\"aBX1qv\":\"This content is not viewable without a Bluesky account.\",\"xI4xW5\":\"This feed is currently receiving high traffic and is temporarily unavailable. Please try again later.\",\"lm845B\":\"この情報は他のユーザーと共有されません。\",\"5Pvw/O\":\"これは、Eメールの変更やパスワードのリセットが必要な場合に重要です。\",\"sQQfZ9\":\"これはオンラインを維持するためのサービスです。\",\"CvX8qs\":\"このリンクは次のウェブサイトへリンクしています:\",\"WKrUVy\":\"この投稿は削除されました。\",\"qpCA5s\":\"この警告は、メディアが接続されている投稿にのみ使用できます。\",\"u9ThjD\":\"スレッドの設定\",\"zmXsk5\":\"スレッドモード\",\"1x30Qt\":\"トグルドロップダウン\",\"KFXQEt\":\"変換\",\"pi8x/S\":\"翻訳\",\"KDw4GX\":\"再試行\",\"RF3/jE\":\"Un-block list\",\"+/SGK9\":\"Un-mute list\",\"nc4Wfd\":\"サービスに接続できません。インターネット接続を確認してください。\",\"tuS5Jz\":\"ブロック解除\",\"0VrZZv\":\"アカウントのブロック解除\",\"6pYY4t\":\"再投稿を元に戻す\",\"05f3UA\":\"残念ながら、アカウントを作成するための要件を満たしていません。\",\"wx9wqY\":\"アカウントのミュート解除\",\"s12/Py\":\"スレッドのミュート解除\",\"EvGmWj\":\"Unpin moderation list\",\"vaz2uI\":[\"リストの\\\\\",[\"displayName\"],\"を更新\"],\"YXMY4w\":\"更新可能\",\"RXbEvi\":\"更新中…\",\"Vwkfp4\":\"テキストファイルのアップロード先:\",\"jTdnU6\":\"他のBlueskyクライアントにアカウントやパスワードにフルアクセスする権限を与えずに、アプリパスワードを使ってログインします。\",\"CH1am9\":\"デフォルトプロバイダーを使用\",\"ZG8UvP\":\"これとハンドルを使って他のアプリにサインインします。\",\"cKXwwI\":\"使用者:\",\"t4Yp4Z\":\"ユーザーハンドル\",\"8tsrUV\":\"ユーザーリスト\",\"nZx9mr\":\"ユーザー名またはEメールアドレス\",\"Sxm8rQ\":\"ユーザー\",\"Hbhyg2\":\"users followed by <0/>\",\"9k1aoj\":[\"Users in \\\"\",[\"0\"],\"\\\"\"],\"MBOY4U\":\"Eメールを確認\",\"Ejyv0o\":\"Eメールを確認\",\"9czCrB\":\"Eメールを確認\",\"ibSVGR\":\"新しいEメールを確認\",\"nHsQde\":\"欠陥事項を表示\",\"47jzzd\":\"アバターを表示\",\"wK4H1r\":\"サイトへアクセス\",\"qjBGxf\":\"あなたが参加してくれることをとても楽しみにしています!\",\"WBQOQ0\":\"申し訳ありませんが、検索を完了できませんでした。数分後に再試行してください。\",\"/mVVX2\":\"申し訳ありません! お探しのページが見つかりません。\",\"meB+tZ\":\"<0>Blueskyへようこそ\",\"Mj7rl/\":[\"この\\\\\",[\"collectionName\"],\"の問題は何ですか?\"],\"3qn29J\":\"この投稿ではどの言語が使われていますか?\",\"uawiGa\":\"アルゴリズムフィードに表示する言語を選択しますか?\",\"yvDWMs\":\"Who can reply\",\"I5S9ZE\":\"ワイド\",\"y02THm\":\"投稿を書く\",\"6ckZRB\":\"返信を書く\",\"l75CjT\":\"はい\",\"STPj0e\":\"ホスティングプロバイダはいつでも変更できます。\",\"67nRLM\":\"新しいパスワードでサインインできるようになりました。\",\"lIcbCU\":\"まだ招待コードがありません!Blueskyをもうしばらく利用したらお送りします。\",\"aFZZYi\":\"ピンで固定されたフィードがありません。\",\"kX/cKs\":\"保存されたフィードがありません!\",\"nbz3Iq\":\"保存されたフィードがありません。\",\"RkXibf\":\"著者をブロックしたか、または著者によってブロックされました。\",\"CbrOgr\":\"You have no feeds.\",\"tCLJ9E\":\"リストがありません。\",\"soH9qC\":\"ブロックしているアカウントはまだありません。アカウントをブロックするには、ユーザーのプロフィールに移動し、アカウントメニューから「アカウントをブロック」を選択します。\",\"NDgp3i\":\"アプリパスワードはまだ作成されていません。 下のボタンを押すと作成できます。\",\"grqdXb\":\"ミュートしているアカウントはまだありません。アカウントをミュートするには、プロフィールに移動し、アカウントメニューから「アカウントをミュート」を選択します。\",\"RrDyEb\":\"「リセットコード」が記載されたEメールが届きます。ここにコードを入力し、新しいパスワードを入力します。\",\"gdRnT7\":\"アカウント\",\"k7hmsH\":\"生年月日\",\"tBpzKB\":\"Eメールが無効なようです。\",\"OubkcP\":\"Eメールが保存されました!すぐにご連絡いたします。\",\"z2L+/9\":\"Eメールは更新されましたが、確認されていません。次のステップとして、新しいEメールを確認してください。\",\"XZlIVw\":\"Eメールはまだ確認されていません。これは、当社が推奨する重要なセキュリティステップです。\",\"qv9f4I\":\"フルハンドルは\",\"lvcqqG\":\"ホスティングプロバイダー\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"投稿、いいね、ブロックは公開されます。ミュートはプライベートです。\",\"okRPtW\":\"プロフィール\",\"ogY7EU\":\"Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in.\",\"MvWO9d\":\"ユーザーハンドル\"}")}; \ No newline at end of file diff --git a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx index d5bb38fb..27aa804d 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 2f2da566..00000000 --- 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 2814cad8..c94ce968 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/yarn.lock b/yarn.lock index 8866537e..a16a73c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10433,16 +10433,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" @@ -12501,7 +12501,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@*, 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== @@ -17330,6 +17330,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" @@ -17680,6 +17687,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,6 +17708,21 @@ react-native-web@~0.19.6: postcss-value-parser "^4.2.0" styleq "^0.1.3" +react-native-webview@^13.6.2: + version "13.6.2" + resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.6.2.tgz#0a9b18793e915add5b5dbdbf32509d7751b49167" + integrity sha512-QzhQ5JCU+Nf2W285DtvCZOVQy/MkJXMwNDYPZvOWQbAOgxJMSSO+BtqXTMA1UPugDsko6PxJ0TxSlUwIwJijDg== + dependencies: + 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.72.5: version "0.72.5" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.72.5.tgz#2c343fa6f3ead362cf07376634a33a4078864357"