···108 {% else %}
109 <meta property="og:title" content="@{{ profileHandle }}">
110 {% endif -%}
111- <meta name="description" content="This post requires authentication to view.">
112- <meta property="og:description" content="This post requires authentication to view.">
113- <meta property="twitter:description" content="This post requires authentication to view.">
114 <meta name="twitter:card" content="summary">
115{% endif -%}
116{%- endblock %}
···129<div id="bsky_post_summary">
130 <h3>Post</h3>
131 <p id="bsky_handle">{{ profileHandle }}</p>
132- <p id="bsky_post_text">This post requires authentication to view.</p>
133</div>
134{% endif -%}
135{%- endblock %}
···108 {% else %}
109 <meta property="og:title" content="@{{ profileHandle }}">
110 {% endif -%}
111+ <meta name="description" content="This author has chosen to make their posts visible only to people who are signed in.">
112+ <meta property="og:description" content="This author has chosen to make their posts visible only to people who are signed in.">
113+ <meta property="twitter:description" content="This author has chosen to make their posts visible only to people who are signed in.">
114 <meta name="twitter:card" content="summary">
115{% endif -%}
116{%- endblock %}
···129<div id="bsky_post_summary">
130 <h3>Post</h3>
131 <p id="bsky_handle">{{ profileHandle }}</p>
132+ <p id="bsky_post_text">This author has chosen to make their posts visible only to people who are signed in.</p>
133</div>
134{% endif -%}
135{%- endblock %}
···1-diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm
2-index b62a2e2..cb469db 100644
3---- a/node_modules/react-native-screens/ios/RNSScreen.mm
4-+++ b/node_modules/react-native-screens/ios/RNSScreen.mm
5-@@ -729,9 +729,26 @@ - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingFor
6- #endif
7- }
8-9--#if !RCT_NEW_ARCH_ENABLED
10-+- (void)willMoveToWindow:(UIWindow *)newWindow
11-+{
12-+ if (@available(iOS 26, *)) {
13-+ // In iOS 26, as soon as another screen appears in transition, it is interactable
14-+ // To avoid glitches resulting from clicking buttons mid transition, we temporarily disable all interactions
15-+ // Disabling interactions for parent navigation controller won't be enough in case of nested stack
16-+ // Furthermore, a stack put inside a modal will exist in an entirely different hierarchy
17-+ // To be sure, we block interactions on the whole window.
18-+ // Note that newWindows is nil when moving from instead of moving to, and Obj-C handles nil correctly
19-+ newWindow.userInteractionEnabled = false;
20-+ }
21-+}
22-+
23- - (void)presentationControllerWillDismiss:(UIPresentationController *)presentationController
24- {
25-+ if (@available(iOS 26, *)) {
26-+ // Disable interactions to disallow multiple modals dismissed at once; see willMoveToWindow
27-+ presentationController.containerView.window.userInteractionEnabled = false;
28-+ }
29-+#if !RCT_NEW_ARCH_ENABLED
30- // On Paper, we need to call both "cancel" and "reset" here because RN's gesture
31- // recognizer does not handle the scenario when it gets cancelled by other top
32- // level gesture recognizer. In this case by the modal dismiss gesture.
33-@@ -744,8 +761,8 @@ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentati
34- // down.
35- [_touchHandler cancel];
36- [_touchHandler reset];
37--}
38- #endif // !RCT_NEW_ARCH_ENABLED
39-+}
40-41- - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
42- {
43-@@ -757,6 +774,10 @@ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presenta
44-45- - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
46- {
47-+ if (@available(iOS 26, *)) {
48-+ // Reenable interactions; see presentationControllerWillDismiss
49-+ presentationController.containerView.window.userInteractionEnabled = true;
50-+ }
51- // NOTE(kkafar): We should consider depracating the use of gesture cancel here & align
52- // with usePreventRemove API of react-navigation v7.
53- [self notifyGestureCancel];
54-@@ -767,6 +788,11 @@ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)pr
55-56- - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
57- {
58-+ if (@available(iOS 26, *)) {
59-+ // Reenable interactions; see presentationControllerWillDismiss
60-+ // Dismissed screen doesn't hold a reference to window, but presentingViewController.view does
61-+ presentationController.presentingViewController.view.window.userInteractionEnabled = true;
62-+ }
63- if ([_reactSuperview respondsToSelector:@selector(presentationControllerDidDismiss:)]) {
64- [_reactSuperview performSelector:@selector(presentationControllerDidDismiss:) withObject:presentationController];
65- }
66-@@ -1518,6 +1544,10 @@ - (void)viewWillDisappear:(BOOL)animated
67-68- - (void)viewDidAppear:(BOOL)animated
69- {
70-+ if (@available(iOS 26, *)) {
71-+ // Reenable interactions, see willMoveToWindow
72-+ self.view.window.userInteractionEnabled = true;
73-+ }
74- [super viewDidAppear:animated];
75- if (!_isSwiping || _shouldNotify) {
76- // we are going forward or dismissing without swipe
77-diff --git a/node_modules/react-native-screens/ios/RNSScreenStack.mm b/node_modules/react-native-screens/ios/RNSScreenStack.mm
78-index 229dc58..10b365b 100644
79---- a/node_modules/react-native-screens/ios/RNSScreenStack.mm
80-+++ b/node_modules/react-native-screens/ios/RNSScreenStack.mm
81-@@ -62,26 +62,6 @@ @interface RNSScreenStackView () <
82-83- @implementation RNSNavigationController
84-85--#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
86--- (void)viewDidLoad
87--{
88-- // iOS 26 introduces new gesture recognizer which replaces our RNSPanGestureRecognizer.
89-- // The problem is that we are not able to handle it here for various reasons:
90-- // - the new recognizer comes with its own delegate and our current approach is to wire
91-- // all recognizers to RNSScreenStackView; to be 100% sure we don't break the logic,
92-- // we would have to decorate its delegate and call it after our code, which would
93-- // break other recognizers that the stack view is the delegate for
94-- // - when RNSScreenStackView.setupGestureHandler method is called, the recognizer hasn't been
95-- // loaded yet and there is no other place to configure in a not "hacky" way
96-- // - the official docs warn us to not use it for anything other than "setting up failure requirements with it"
97-- // - we expose fullScreenGestureEnabled prop to enable/disable the feature,
98-- // so we need control over the delegate
99-- if (@available(iOS 26.0, *)) {
100-- self.interactiveContentPopGestureRecognizer.enabled = NO;
101-- }
102--}
103--#endif // iOS 26
104--
105- #if !TARGET_OS_TV
106- - (UIViewController *)childViewControllerForStatusBarStyle
107- {
108-@@ -219,50 +199,6 @@ - (bool)onRepeatedTabSelectionOfTabScreenController:(RNSTabsScreenViewController
109- return false;
110- }
111-112--#pragma mark - UINavigationBarDelegate
113--
114--#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
115--- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
116--{
117-- if (@available(iOS 26, *)) {
118-- // To prevent popping multiple screens when back button is pressed repeatedly,
119-- // We allow for pop operation to proceed only if no transition is in progress,
120-- // which we check indirectly by checking if transitionCoordinator is set.
121-- // If it's not, we are safe to proceed.
122-- if (self.transitionCoordinator == nil) {
123-- // We still need to disable interactions for back button so click effects are not applied,
124-- // and there is unfortunately no better place for it currently
125-- UIView *button = [navigationBar rnscreens_findBackButtonWrapperView];
126-- if (button != nil) {
127-- button.userInteractionEnabled = false;
128-- }
129--
130-- return true;
131-- }
132--
133-- return false;
134-- }
135--
136-- return true;
137--}
138--
139--- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
140--{
141-- if (@available(iOS 26, *)) {
142-- // Reset interactions on back button -> see navigationBar:shouldPopItem
143-- // IMPORTANT: This reset won't execute when preventNativeDismiss is on.
144-- // However, on iOS 26, unlike in previous versions, the back button instance changes
145-- // when handling preventNativeDismiss and userIteractionEnabled is reset.
146-- // The instance also changes when regular screen pop happens, but in that case
147-- // the value of userInteractionEnabled is carried on, and we reset it here.
148-- UIView *button = [navigationBar rnscreens_findBackButtonWrapperView];
149-- if (button != nil) {
150-- button.userInteractionEnabled = true;
151-- }
152-- }
153--}
154--#endif // Check for iOS >= 26
155--
156- #pragma mark - RNSFrameCorrectionProvider
157-158- #ifdef RNS_GAMMA_ENABLED
159-@@ -327,7 +263,7 @@ @implementation RNSScreenStackView {
160- UINavigationController *_controller;
161- NSMutableArray<RNSScreenView *> *_reactSubviews;
162- BOOL _invalidated;
163-- BOOL _isFullWidthSwiping;
164-+ BOOL _isFullWidthSwipingWithPanGesture; // used only for content swipe with RNSPanGestureRecognizer
165- RNSPercentDrivenInteractiveTransition *_interactionController;
166- __weak RNSScreenStackManager *_manager;
167- BOOL _updateScheduled;
168-@@ -522,6 +458,11 @@ - (void)reactAddControllerToClosestParent:(UIViewController *)controller
169- [self addSubview:controller.view];
170- #if !TARGET_OS_TV
171- _controller.interactivePopGestureRecognizer.delegate = self;
172-+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
173-+ if (@available(iOS 26, *)) {
174-+ _controller.interactiveContentPopGestureRecognizer.delegate = self;
175-+ }
176-+#endif // Check for iOS >= 26.0
177- #endif
178- [controller didMoveToParentViewController:parentView.reactViewController];
179- // On iOS pre 12 we observed that `willShowViewController` delegate method does not always
180-@@ -943,7 +884,7 @@ - (void)dismissOnReload
181- // when preventing the native dismiss with back button, we have to return the animator.
182- // Also, we need to return the animator when full width swiping even if the animation is not custom,
183- // otherwise the screen will be just popped immediately due to no animation
184-- ((operation == UINavigationControllerOperationPop && shouldCancelDismiss) || _isFullWidthSwiping ||
185-+ ((operation == UINavigationControllerOperationPop && shouldCancelDismiss) || _isFullWidthSwipingWithPanGesture ||
186- [RNSScreenStackAnimator isCustomAnimation:screen.stackAnimation] || _customAnimation)) {
187- return [[RNSScreenStackAnimator alloc] initWithOperation:operation];
188- }
189-@@ -967,23 +908,39 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
190- }
191- RNSScreenView *topScreen = _reactSubviews.lastObject;
192-193-+ BOOL customAnimationOnSwipePropSetAndSelectedAnimationIsCustom =
194-+ topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation];
195-+
196- #if TARGET_OS_TV || TARGET_OS_VISION
197- [self cancelTouchesInParent];
198- return YES;
199- #else
200-- // RNSPanGestureRecognizer will receive events iff topScreen.fullScreenSwipeEnabled == YES;
201-- // Events are filtered in gestureRecognizer:shouldReceivePressOrTouchEvent: method
202- if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
203-- if ([self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
204-- _isFullWidthSwiping = YES;
205-- [self cancelTouchesInParent];
206-- return YES;
207-+ // On iOS < 26, we have a custom full screen swipe recognizer that functions similarily
208-+ // to interactiveContentPopGestureRecognizer introduced in iOS 26.
209-+ // On iOS >= 26, we want to use the native one, but we are unable to handle custom animations
210-+ // with native interactiveContentPopGestureRecognizer, so we have to fallback to the old implementation.
211-+ // In this case, the old one should behave as close as the new native one, having only the difference
212-+ // in animation, and without any customization that is exclusive for it (e.g. gestureResponseDistance).
213-+ if (@available(iOS 26, *)) {
214-+ if (customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) {
215-+ _isFullWidthSwipingWithPanGesture = YES;
216-+ [self cancelTouchesInParent];
217-+ return YES;
218-+ }
219-+ return NO;
220-+ } else {
221-+ if ([self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
222-+ _isFullWidthSwipingWithPanGesture = YES;
223-+ [self cancelTouchesInParent];
224-+ return YES;
225-+ }
226-+ return NO;
227- }
228-- return NO;
229- }
230-231- // Now we're dealing with RNSScreenEdgeGestureRecognizer (or _UIParallaxTransitionPanGestureRecognizer)
232-- if (topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation]) {
233-+ if (customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) {
234- if ([gestureRecognizer isKindOfClass:[RNSScreenEdgeGestureRecognizer class]]) {
235- UIRectEdge edges = ((RNSScreenEdgeGestureRecognizer *)gestureRecognizer).edges;
236- BOOL isRTL = _controller.view.semanticContentAttribute == UISemanticContentAttributeForceRightToLeft;
237-@@ -1028,7 +985,9 @@ - (void)setupGestureHandlers
238- rightEdgeSwipeGestureRecognizer.delegate = self;
239- [self addGestureRecognizer:rightEdgeSwipeGestureRecognizer];
240-241-- // gesture recognizer for full width swipe gesture
242-+ // Starting from iOS 26, RNSPanGestureRecognizer has been mostly replaced by native
243-+ // interactiveContentPopGestureRecognizer. It still needs to handle custom dismiss animations,
244-+ // which we are not able to handle with the latter.
245- RNSPanGestureRecognizer *panRecognizer = [[RNSPanGestureRecognizer alloc] initWithTarget:self
246- action:@selector(handleSwipe:)];
247- panRecognizer.delegate = self;
248-@@ -1091,7 +1050,7 @@ - (void)handleSwipe:(UIPanGestureRecognizer *)gestureRecognizer
249- [_interactionController cancelInteractiveTransition];
250- }
251- _interactionController = nil;
252-- _isFullWidthSwiping = NO;
253-+ _isFullWidthSwipingWithPanGesture = NO;
254- }
255- default: {
256- break;
257-@@ -1225,14 +1184,6 @@ - (BOOL)isScrollViewPanGestureRecognizer:(UIGestureRecognizer *)gestureRecognize
258- // Be careful when adding another type of gesture recognizer.
259- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePressOrTouchEvent:(NSObject *)event
260- {
261-- if (@available(iOS 26, *)) {
262-- // in iOS 26, you can swipe to pop screen before the previous one finished transitioning;
263-- // this prevents from registering the second gesture
264-- if ([self isTransitionInProgress]) {
265-- return NO;
266-- }
267-- }
268--
269- RNSScreenView *topScreen = _reactSubviews.lastObject;
270-271- for (RNSScreenView *s in _reactSubviews.reverseObjectEnumerator) {
272-@@ -1249,10 +1200,30 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
273- return NO;
274- }
275-276-+ BOOL customAnimationOnSwipePropSetAndSelectedAnimationIsCustom =
277-+ topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation];
278-+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
279-+ if (@available(iOS 26, *)) {
280-+ // On iOS 26, fullScreenSwipeEnabled takes no effect, and depending on whether custom animations are on,
281-+ // we select either interactiveContentPopGestureRecognizer or RNSPanGestureRecognizer
282-+ if (([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]] &&
283-+ !customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) ||
284-+ (gestureRecognizer == _controller.interactiveContentPopGestureRecognizer &&
285-+ customAnimationOnSwipePropSetAndSelectedAnimationIsCustom)) {
286-+ return NO;
287-+ }
288-+ } else {
289-+ // We want to pass events to RNSPanGestureRecognizer iff full screen swipe is enabled.
290-+ if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
291-+ return topScreen.fullScreenSwipeEnabled;
292-+ }
293-+ }
294-+#else // check for iOS >= 26
295- // We want to pass events to RNSPanGestureRecognizer iff full screen swipe is enabled.
296- if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
297- return topScreen.fullScreenSwipeEnabled;
298- }
299-+#endif // check for iOS >= 26
300-301- // RNSScreenEdgeGestureRecognizer || _UIParallaxTransitionPanGestureRecognizer
302- return YES;
303-@@ -1268,15 +1239,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
304- return [self gestureRecognizer:gestureRecognizer shouldReceivePressOrTouchEvent:touch];
305- }
306-307--- (BOOL)isTransitionInProgress
308--{
309-- if (_controller.transitionCoordinator != nil) {
310-- return YES;
311-- }
312--
313-- return NO;
314--}
315--
316- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
317- shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
318- {
319-@@ -1289,7 +1251,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
320- if (gestureRecognizer.state == UIGestureRecognizerStateBegan || isBackGesture) {
321- return NO;
322- }
323--
324- return YES;
325- }
326- return NO;
···5import {useLingui} from '@lingui/react'
67import {cleanError} from '#/lib/strings/errors'
8-import {useWarnMaxGraphemeCount} from '#/lib/strings/helpers'
9import {richTextToString} from '#/lib/strings/rich-text-helpers'
10import {shortenLinks, stripInvalidMentions} from '#/lib/strings/rich-text-manip'
11import {logger} from '#/logger'
···262 _,
263 ])
264265- const displayNameTooLong = useWarnMaxGraphemeCount({
266 text: displayName,
267 maxCount: DISPLAY_NAME_MAX_GRAPHEMES,
268 })
269- const descriptionTooLong = useWarnMaxGraphemeCount({
270 text: descriptionRt,
271 maxCount: DESCRIPTION_MAX_GRAPHEMES,
272 })
···5import {useLingui} from '@lingui/react'
67import {cleanError} from '#/lib/strings/errors'
8+import {isOverMaxGraphemeCount} from '#/lib/strings/helpers'
9import {richTextToString} from '#/lib/strings/rich-text-helpers'
10import {shortenLinks, stripInvalidMentions} from '#/lib/strings/rich-text-manip'
11import {logger} from '#/logger'
···262 _,
263 ])
264265+ const displayNameTooLong = isOverMaxGraphemeCount({
266 text: displayName,
267 maxCount: DISPLAY_NAME_MAX_GRAPHEMES,
268 })
269+ const descriptionTooLong = isOverMaxGraphemeCount({
270 text: descriptionRt,
271 maxCount: DESCRIPTION_MAX_GRAPHEMES,
272 })
+1-2
src/components/moderation/ReportDialog/index.tsx
···1import React from 'react'
2-import {Pressable, View} from 'react-native'
3-import {type ScrollView} from 'react-native-gesture-handler'
4import {type AppBskyLabelerDefs, BSKY_LABELER_DID} from '@atproto/api'
5import {msg, Trans} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
···1import React from 'react'
2+import {Pressable, type ScrollView, View} from 'react-native'
03import {type AppBskyLabelerDefs, BSKY_LABELER_DID} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
+7-27
src/lib/strings/helpers.ts
···1-import {useCallback, useMemo} from 'react'
2import {type RichText} from '@atproto/api'
3-import Graphemer from 'graphemer'
45import {shortenLinks} from './rich-text-manip'
6···29 return str
30}
3132-export function useEnforceMaxGraphemeCount() {
33- const splitter = useMemo(() => new Graphemer(), [])
34-35- return useCallback(
36- (text: string, maxCount: number) => {
37- if (splitter.countGraphemes(text) > maxCount) {
38- return splitter.splitGraphemes(text).slice(0, maxCount).join('')
39- } else {
40- return text
41- }
42- },
43- [splitter],
44- )
45-}
46-47-export function useWarnMaxGraphemeCount({
48 text,
49 maxCount,
50}: {
51 text: string | RichText
52 maxCount: number
53}) {
54- const splitter = useMemo(() => new Graphemer(), [])
55-56- return useMemo(() => {
57- if (typeof text === 'string') {
58- return splitter.countGraphemes(text) > maxCount
59- } else {
60- return shortenLinks(text).graphemeLength > maxCount
61- }
62- }, [splitter, maxCount, text])
63}
6465export function countLines(str: string | undefined): number {
···01import {type RichText} from '@atproto/api'
2+import {countGraphemes} from 'unicode-segmenter/grapheme'
34import {shortenLinks} from './rich-text-manip'
5···28 return str
29}
3031+export function isOverMaxGraphemeCount({
00000000000000032 text,
33 maxCount,
34}: {
35 text: string | RichText
36 maxCount: number
37}) {
38+ if (typeof text === 'string') {
39+ return countGraphemes(text) > maxCount
40+ } else {
41+ return shortenLinks(text).graphemeLength > maxCount
42+ }
000043}
4445export function countLines(str: string | undefined): number {
···436msgstr ""
437438#: src/screens/Settings/FindContactsSettings.tsx:430
439-msgid "{numMatches, plural, one {1 contact found} other {# contacts found}}"
440msgstr ""
441442#: src/components/NewskieDialog.tsx:113
···574msgid "A screenshot of a profile page with a bell icon next to the follow button, indicating the new activity notifications feature."
575msgstr ""
576577-#: src/Navigation.tsx:534
578#: src/screens/Settings/AboutSettings.tsx:75
579#: src/screens/Settings/Settings.tsx:262
580#: src/screens/Settings/Settings.tsx:265
···609msgid "Accessibility"
610msgstr ""
611612-#: src/Navigation.tsx:385
613msgid "Accessibility Settings"
614msgstr ""
615616-#: src/Navigation.tsx:401
617#: src/screens/Login/LoginForm.tsx:194
618#: src/screens/Settings/AccountSettings.tsx:51
619#: src/screens/Settings/Settings.tsx:180
···648msgid "Account Muted by List"
649msgstr ""
650651-#: src/screens/Settings/Settings.tsx:644
652msgid "Account options"
653msgstr ""
654···656msgid "Account provider"
657msgstr ""
658659-#: src/screens/Settings/Settings.tsx:680
660msgid "Account removed from quick access"
661msgstr ""
662···688msgid "Activity from others"
689msgstr ""
690691-#: src/Navigation.tsx:502
692msgid "Activity notifications"
693msgstr ""
694···770msgid "Add emoji reaction"
771msgstr ""
772773-#: src/view/com/feeds/ComposerPrompt.tsx:224
774msgid "Add image"
775msgstr ""
776···1011msgid "Already signed in as @{0}"
1012msgstr ""
10131014-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:186
1015#: src/view/com/composer/GifAltText.tsx:100
1016#: src/view/com/composer/photos/Gallery.tsx:188
1017msgid "ALT"
···1027msgid "Alt text"
1028msgstr ""
10291030-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:191
1031msgid "Alt Text"
1032msgstr ""
1033···1167msgid "Animals"
1168msgstr ""
11691170-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:149
1171msgid "Animated GIF"
1172msgstr ""
1173···1193msgid "Anyone who follows me"
1194msgstr ""
11951196-#: src/Navigation.tsx:542
1197#: src/screens/Settings/AppIconSettings/index.tsx:67
1198#: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:18
1199#: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:23
···1234msgid "App passwords"
1235msgstr ""
12361237-#: src/Navigation.tsx:353
1238#: src/screens/Settings/AppPasswords.tsx:50
1239msgid "App Passwords"
1240msgstr ""
···1270msgid "Appeal this decision"
1271msgstr ""
12721273-#: src/Navigation.tsx:393
1274#: src/screens/Settings/AppearanceSettings.tsx:73
1275#: src/screens/Settings/Settings.tsx:230
1276#: src/screens/Settings/Settings.tsx:233
···1520msgid "Blocked accounts"
1521msgstr ""
15221523-#: src/Navigation.tsx:194
1524#: src/view/screens/ModerationBlockedAccounts.tsx:104
1525msgid "Blocked Accounts"
1526msgstr ""
···1642msgid "Browse custom feeds"
1643msgstr ""
16441645-#: src/components/FeedInterstitials.tsx:778
1646msgid "Browse more accounts"
1647msgstr ""
16481649-#: src/components/FeedInterstitials.tsx:907
1650msgid "Browse more feeds on the Explore page"
1651msgstr ""
16521653-#: src/components/FeedInterstitials.tsx:888
1654-#: src/components/FeedInterstitials.tsx:891
1655msgid "Browse more suggestions"
1656msgstr ""
16571658-#: src/components/FeedInterstitials.tsx:916
1659msgid "Browse more suggestions on the Explore page"
1660msgstr ""
1661···1872msgstr ""
18731874#: src/lib/hooks/useNotificationHandler.ts:99
1875-#: src/Navigation.tsx:559
1876#: src/view/shell/bottom-bar/BottomBar.tsx:221
1877#: src/view/shell/desktop/LeftNav.tsx:608
1878#: src/view/shell/Drawer.tsx:466
···1898msgid "Chat muted"
1899msgstr ""
19001901-#: src/Navigation.tsx:569
1902#: src/screens/Messages/components/InboxPreview.tsx:22
1903msgid "Chat request inbox"
1904msgstr ""
···1910msgstr ""
19111912#: src/components/dms/ConvoMenu.tsx:78
1913-#: src/Navigation.tsx:564
1914#: src/screens/Messages/ChatList.tsx:81
1915#: src/screens/Messages/ChatList.tsx:85
1916#: src/screens/Messages/ChatList.tsx:380
···2081#: src/components/live/EditLiveDialog.tsx:235
2082#: src/components/NewskieDialog.tsx:167
2083#: src/components/NewskieDialog.tsx:173
2084-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:197
2085#: src/components/ProgressGuide/FollowDialog.tsx:440
2086#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:118
2087#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:124
···2199msgstr ""
22002201#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:45
2202-#: src/Navigation.tsx:343
2203#: src/view/screens/CommunityGuidelines.tsx:37
2204msgid "Community Guidelines"
2205msgstr ""
···22982299#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:93
2300msgid "Contact us"
00002301msgstr ""
23022303#: src/screens/Settings/FindContactsSettings.tsx:471
2304msgid "Contacts removed"
2305msgstr ""
23062307-#: src/screens/Settings/FindContactsSettings.tsx:498
2308-msgid "Contacts uploaded"
2309-msgstr ""
2310-2311#: src/screens/Settings/ContentAndMediaSettings.tsx:51
2312msgid "Content & Media"
2313msgstr ""
···2317msgid "Content and media"
2318msgstr ""
23192320-#: src/Navigation.tsx:518
2321msgid "Content and Media"
2322msgstr ""
2323···25152516#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:40
2517#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:107
2518-#: src/Navigation.tsx:348
2519#: src/view/screens/CopyrightPolicy.tsx:34
2520msgid "Copyright Policy"
2521msgstr ""
···26042605#: src/components/StarterPack/ProfileStarterPacks.tsx:206
2606#: src/components/StarterPack/ProfileStarterPacks.tsx:315
2607-#: src/Navigation.tsx:599
2608msgid "Create a starter pack"
2609msgstr ""
2610···3230msgid "Edit moderation list"
3231msgstr ""
32323233-#: src/Navigation.tsx:358
3234#: src/view/screens/Feeds.tsx:518
3235msgid "Edit My Feeds"
3236msgstr ""
···3272msgid "Edit who can reply"
3273msgstr ""
32743275-#: src/Navigation.tsx:604
3276msgid "Edit your starter pack"
3277msgstr ""
3278···3601msgid "Explicit sexual images."
3602msgstr ""
36033604-#: src/Navigation.tsx:778
3605#: src/screens/Search/Shell.tsx:327
3606#: src/view/shell/desktop/LeftNav.tsx:690
3607#: src/view/shell/Drawer.tsx:414
···3637msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button."
3638msgstr ""
36393640-#: src/Navigation.tsx:377
3641#: src/screens/Settings/ExternalMediaPreferences.tsx:34
3642msgid "External Media Preferences"
3643msgstr ""
···3874msgid "False information about elections"
3875msgstr ""
38763877-#: src/Navigation.tsx:293
3878msgid "Feed"
3879msgstr ""
3880···3915msgid "Feedback sent to feed operator"
3916msgstr ""
39173918-#: src/Navigation.tsx:584
3919#: src/screens/SavedFeeds.tsx:108
3920#: src/screens/Search/SearchResults.tsx:78
3921#: src/screens/StarterPack/StarterPackScreen.tsx:190
···3986msgid "Find accounts to follow"
3987msgstr ""
39883989-#: src/Navigation.tsx:425
3990-#: src/Navigation.tsx:626
3991msgid "Find Contacts"
3992msgstr ""
3993···4141msgid "Followed by <0>{0}</0>, <1>{1}</1>, and {2, plural, one {# other} other {# others}}"
4142msgstr ""
41434144-#: src/Navigation.tsx:247
4145msgid "Followers of @{0} that you know"
4146msgstr ""
4147···4184msgid "Following feed preferences"
4185msgstr ""
41864187-#: src/Navigation.tsx:364
4188#: src/screens/Settings/FollowingFeedPreferences.tsx:56
4189msgid "Following Feed Preferences"
4190msgstr ""
···4510msgid "Harming or endangering minors"
4511msgstr ""
45124513-#: src/Navigation.tsx:549
4514msgid "Hashtag"
4515msgstr ""
4516···4696msgid "Hold up! We’re gradually giving access to video, and you’re still waiting in line. Check back soon!"
4697msgstr ""
46984699-#: src/Navigation.tsx:773
4700-#: src/Navigation.tsx:793
4701#: src/view/shell/bottom-bar/BottomBar.tsx:178
4702#: src/view/shell/desktop/LeftNav.tsx:672
4703#: src/view/shell/Drawer.tsx:440
···4853msgid "Import contacts to find your friends"
4854msgstr ""
485500004856#: src/ageAssurance/components/NoAccessScreen.tsx:204
4857msgid "In order to provide an age-appropriate experience, we need to know your birthdate. This is a one-time thing, and your data will be kept private."
4858msgstr ""
···5081msgid "Labels on your content"
5082msgstr ""
50835084-#: src/Navigation.tsx:220
5085msgid "Language Settings"
5086msgstr ""
5087···5258msgid "Like 10 posts to train the Discover feed"
5259msgstr ""
52605261-#: src/Navigation.tsx:462
5262msgid "Like notifications"
5263msgstr ""
5264···5270msgid "Like this labeler"
5271msgstr ""
52725273-#: src/Navigation.tsx:298
5274-#: src/Navigation.tsx:303
5275msgid "Liked by"
5276msgstr ""
5277···5306msgid "Likes of your reposts"
5307msgstr ""
53085309-#: src/Navigation.tsx:486
5310msgid "Likes of your reposts notifications"
5311msgstr ""
5312···5319msgid "Linear"
5320msgstr ""
53215322-#: src/Navigation.tsx:253
5323msgid "List"
5324msgstr ""
5325···5399msgid "List unmuted"
5400msgstr ""
54015402-#: src/Navigation.tsx:174
5403#: src/view/screens/Lists.tsx:67
5404#: src/view/screens/Profile.tsx:233
5405#: src/view/screens/Profile.tsx:241
···5464msgid "Loading..."
5465msgstr ""
54665467-#: src/Navigation.tsx:323
5468msgid "Log"
5469msgstr ""
5470···5559msgid "Media that may be disturbing or inappropriate for some audiences."
5560msgstr ""
55615562-#: src/Navigation.tsx:446
5563msgid "Mention notifications"
5564msgstr ""
5565···5612msgid "Message options"
5613msgstr ""
56145615-#: src/Navigation.tsx:788
5616msgid "Messages"
5617msgstr ""
5618···5625msgid "Minor harassment or bullying"
5626msgstr ""
56275628-#: src/Navigation.tsx:510
5629msgid "Miscellaneous notifications"
5630msgstr ""
5631···5633msgid "Misleading"
5634msgstr ""
56355636-#: src/Navigation.tsx:179
5637#: src/screens/Moderation/index.tsx:99
5638#: src/screens/Settings/Settings.tsx:194
5639#: src/screens/Settings/Settings.tsx:197
···5672msgid "Moderation lists"
5673msgstr ""
56745675-#: src/Navigation.tsx:184
5676#: src/view/screens/ModerationModlists.tsx:67
5677msgid "Moderation Lists"
5678msgstr ""
···5681msgid "moderation settings"
5682msgstr ""
56835684-#: src/Navigation.tsx:313
5685msgid "Moderation states"
5686msgstr ""
5687···5804msgid "Muted accounts"
5805msgstr ""
58065807-#: src/Navigation.tsx:189
5808#: src/view/screens/ModerationMutedAccounts.tsx:116
5809msgid "Muted Accounts"
5810msgstr ""
···5903msgid "New Feature"
5904msgstr ""
59055906-#: src/Navigation.tsx:478
5907msgid "New follower notifications"
5908msgstr ""
5909···6209msgid "Not followed by anyone you're following"
6210msgstr ""
62116212-#: src/Navigation.tsx:169
6213#: src/view/screens/Profile.tsx:132
6214msgid "Not Found"
6215msgstr ""
···6235msgid "Nothing saved yet"
6236msgstr ""
62376238-#: src/Navigation.tsx:432
6239-#: src/Navigation.tsx:579
6240#: src/view/screens/Notifications.tsx:136
6241msgid "Notification settings"
6242msgstr ""
···6249msgid "Notification Sounds"
6250msgstr ""
62516252-#: src/Navigation.tsx:574
6253-#: src/Navigation.tsx:783
6254#: src/screens/Notifications/ActivityList.tsx:30
6255#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:90
6256#: src/screens/Settings/NotificationSettings/index.tsx:92
···6392msgid "Open avatar creator"
6393msgstr ""
63946395-#: src/view/com/feeds/ComposerPrompt.tsx:202
6396msgid "Open camera"
6397msgstr ""
6398···6501msgid "Opens composer"
6502msgstr ""
65036504-#: src/view/com/feeds/ComposerPrompt.tsx:203
6505msgid "Opens device camera"
6506msgstr ""
6507···6532msgid "Opens helpdesk in browser"
6533msgstr ""
65346535-#: src/view/com/feeds/ComposerPrompt.tsx:225
6536msgid "Opens image picker"
6537msgstr ""
6538···6675msgid "Password updated!"
6676msgstr ""
66776678-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:43
6679#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:137
6680#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VideoControls.tsx:369
6681msgid "Pause"
···6691msgid "People"
6692msgstr ""
66936694-#: src/Navigation.tsx:240
6695msgid "People followed by @{0}"
6696msgstr ""
66976698-#: src/Navigation.tsx:233
6699msgid "People following @{0}"
6700msgstr ""
6701···6786msgid "Pinned to your feeds"
6787msgstr ""
67886789-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:43
6790#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:137
6791#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VideoControls.tsx:370
6792msgid "Play"
···6805msgid "Play Video"
6806msgstr ""
68076808-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:42
6809msgid "Plays or pauses the GIF"
6810msgstr ""
6811···6953msgid "Please sign in as @{0}"
6954msgstr ""
695500006956#: src/screens/FindContactsFlowScreen.tsx:71
6957-#: src/screens/Settings/FindContactsSettings.tsx:102
6958msgid "Please use the native app to sync your contacts."
6959msgstr ""
6960···7004msgid "Post blocked"
7005msgstr ""
70067007-#: src/Navigation.tsx:266
7008-#: src/Navigation.tsx:273
7009-#: src/Navigation.tsx:280
7010-#: src/Navigation.tsx:287
7011msgid "Post by @{0}"
7012msgstr ""
7013···7041msgid "Post interaction settings"
7042msgstr ""
70437044-#: src/Navigation.tsx:200
7045#: src/screens/ModerationInteractionSettings/index.tsx:34
7046msgid "Post Interaction Settings"
7047msgstr ""
···7140msgid "Privacy and security"
7141msgstr ""
71427143-#: src/Navigation.tsx:409
7144-#: src/Navigation.tsx:417
7145#: src/screens/Settings/ActivityPrivacySettings.tsx:40
7146#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:44
7147msgid "Privacy and Security"
···71547155#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:35
7156#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:102
7157-#: src/Navigation.tsx:333
7158#: src/screens/Settings/AboutSettings.tsx:92
7159#: src/screens/Settings/AboutSettings.tsx:95
7160#: src/view/screens/PrivacyPolicy.tsx:34
···7253msgid "QR code saved to your camera roll!"
7254msgstr ""
72557256-#: src/Navigation.tsx:454
7257msgid "Quote notifications"
7258msgstr ""
7259···7414#: src/components/StarterPack/Wizard/WizardListCard.tsx:105
7415#: src/components/StarterPack/Wizard/WizardListCard.tsx:112
7416#: src/screens/Bookmarks/index.tsx:266
7417-#: src/screens/Settings/Settings.tsx:682
7418#: src/view/com/modals/UserAddRemoveLists.tsx:235
7419#: src/view/com/posts/PostFeedErrorMessage.tsx:220
7420msgid "Remove"
···7428msgid "Remove {historyItem}"
7429msgstr ""
74307431-#: src/screens/Settings/Settings.tsx:661
7432-#: src/screens/Settings/Settings.tsx:664
7433msgid "Remove account"
7434msgstr ""
7435···7474msgid "Remove from my feeds"
7475msgstr ""
74767477-#: src/screens/Settings/Settings.tsx:674
7478msgid "Remove from quick access?"
7479msgstr ""
7480···7641msgid "Reply Hidden by You"
7642msgstr ""
76437644-#: src/Navigation.tsx:438
7645msgid "Reply notifications"
7646msgstr ""
7647···7756msgid "Repost ({0, plural, one {# repost} other {# reposts}})"
7757msgstr ""
77587759-#: src/Navigation.tsx:470
7760msgid "Repost notifications"
7761msgstr ""
7762···7797msgid "Reposts of your reposts"
7798msgstr ""
77997800-#: src/Navigation.tsx:494
7801msgid "Reposts of your reposts notifications"
7802msgstr ""
7803···8006msgstr ""
80078008#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:143
8009-#: src/Navigation.tsx:618
8010#: src/screens/Bookmarks/index.tsx:60
8011msgid "Saved Posts"
8012msgstr ""
···8052msgid "Search"
8053msgstr ""
80548055-#: src/Navigation.tsx:259
8056#: src/screens/Profile/ProfileSearch.tsx:37
8057msgid "Search @{0}'s posts"
8058msgstr ""
···8169msgstr ""
81708171#: src/components/FeedInterstitials.tsx:730
8172-#: src/components/FeedInterstitials.tsx:793
8173msgid "See more"
8174msgstr ""
8175···8448msgid "Sets email for password reset"
8449msgstr ""
84508451-#: src/Navigation.tsx:215
8452#: src/screens/Settings/Settings.tsx:105
8453#: src/view/shell/desktop/LeftNav.tsx:805
8454#: src/view/shell/Drawer.tsx:609
···8593msgid "Share your favorite feed!"
8594msgstr ""
85958596-#: src/Navigation.tsx:318
8597msgid "Shared Preferences Tester"
8598msgstr ""
8599···8603msgid "Show"
8604msgstr ""
86058606-#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:178
8607msgid "Show alt text"
8608msgstr ""
8609···8842msgid "Some of your verifications are invalid."
8843msgstr ""
88448845-#: src/components/FeedInterstitials.tsx:870
8846msgid "Some other feeds you might like"
8847msgstr ""
8848···8956msgid "Start chat with {displayName}"
8957msgstr ""
89588959-#: src/Navigation.tsx:589
8960-#: src/Navigation.tsx:594
8961#: src/screens/StarterPack/Wizard/index.tsx:209
8962msgid "Starter Pack"
8963msgstr ""
···9010msgid "Stored as part of a secure code for matching with others"
9011msgstr ""
90129013-#: src/Navigation.tsx:308
9014#: src/screens/Settings/Settings.tsx:466
9015msgid "Storybook"
9016msgstr ""
···9101msgid "Sunset"
9102msgstr ""
91039104-#: src/Navigation.tsx:328
9105#: src/view/screens/Support.tsx:34
9106#: src/view/screens/Support.tsx:37
9107msgid "Support"
···9215#: src/components/dialogs/BirthDateSettings.tsx:182
9216#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:30
9217#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:97
9218-#: src/Navigation.tsx:338
9219#: src/screens/Settings/AboutSettings.tsx:84
9220#: src/screens/Settings/AboutSettings.tsx:87
9221#: src/view/screens/TermsOfService.tsx:34
···9528msgid "This appeal will be sent to Bluesky's moderation service."
9529msgstr ""
9530000009531#: src/screens/Messages/components/MessageListError.tsx:18
9532msgid "This chat was disconnected"
9533msgstr ""
···9737msgid "This will delete \"{0}\" from your muted words. You can always add it back later."
9738msgstr ""
97399740-#: src/screens/Settings/Settings.tsx:676
9741msgid "This will remove @{0} from the quick access list."
9742msgstr ""
9743···9764msgid "Threaded"
9765msgstr ""
97669767-#: src/Navigation.tsx:371
9768msgid "Threads Preferences"
9769msgstr ""
9770···9830msgid "Top replies first"
9831msgstr ""
98329833-#: src/Navigation.tsx:554
9834msgid "Topic"
9835msgstr ""
9836···10200msgid "Upload from Library"
10201msgstr ""
1020210203-#: src/screens/Settings/FindContactsSettings.tsx:507
10204-msgid "Uploaded on {0}"
10205-msgstr ""
10206-10207#: src/lib/api/index.ts:302
10208msgid "Uploading images..."
10209msgstr ""
···10341msgid "Verification settings"
10342msgstr ""
1034310344-#: src/Navigation.tsx:208
10345#: src/screens/Moderation/VerificationSettings.tsx:32
10346msgid "Verification Settings"
10347msgstr ""
···10447msgid "Video failed to process"
10448msgstr ""
1044910450-#: src/Navigation.tsx:610
10451msgid "Video Feed"
10452msgstr ""
10453···10858#: src/view/com/auth/SplashScreen.tsx:51
10859#: src/view/com/auth/SplashScreen.web.tsx:103
10860#: src/view/com/composer/Composer.tsx:857
10861-#: src/view/com/feeds/ComposerPrompt.tsx:193
10862msgid "What's up?"
10863msgstr ""
10864···11278msgid "You must grant access to your photo library to save a QR code"
11279msgstr ""
1128011281-#: src/screens/PostThread/components/ThreadItemAnchorNoUnauthenticated.tsx:27
11282-#: src/screens/PostThread/components/ThreadItemPostNoUnauthenticated.tsx:47
11283-msgid "You must sign in to view this post."
11284-msgstr ""
11285-11286#: src/view/com/composer/SelectMediaButton.tsx:442
11287msgid "You need to allow access to your media library."
11288msgstr ""
···11524msgid "Your full handle will be <0>@{0}</0>"
11525msgstr ""
1152611527-#: src/Navigation.tsx:526
11528#: src/screens/Search/modules/ExploreInterestsCard.tsx:67
11529#: src/screens/Settings/ContentAndMediaSettings.tsx:92
11530#: src/screens/Settings/ContentAndMediaSettings.tsx:95
···436msgstr ""
437438#: src/screens/Settings/FindContactsSettings.tsx:430
439+msgid "{numMatches, plural, one {# contact found} other {# contacts found}}"
440msgstr ""
441442#: src/components/NewskieDialog.tsx:113
···574msgid "A screenshot of a profile page with a bell icon next to the follow button, indicating the new activity notifications feature."
575msgstr ""
576577+#: src/Navigation.tsx:535
578#: src/screens/Settings/AboutSettings.tsx:75
579#: src/screens/Settings/Settings.tsx:262
580#: src/screens/Settings/Settings.tsx:265
···609msgid "Accessibility"
610msgstr ""
611612+#: src/Navigation.tsx:386
613msgid "Accessibility Settings"
614msgstr ""
615616+#: src/Navigation.tsx:402
617#: src/screens/Login/LoginForm.tsx:194
618#: src/screens/Settings/AccountSettings.tsx:51
619#: src/screens/Settings/Settings.tsx:180
···648msgid "Account Muted by List"
649msgstr ""
650651+#: src/screens/Settings/Settings.tsx:646
652msgid "Account options"
653msgstr ""
654···656msgid "Account provider"
657msgstr ""
658659+#: src/screens/Settings/Settings.tsx:682
660msgid "Account removed from quick access"
661msgstr ""
662···688msgid "Activity from others"
689msgstr ""
690691+#: src/Navigation.tsx:503
692msgid "Activity notifications"
693msgstr ""
694···770msgid "Add emoji reaction"
771msgstr ""
772773+#: src/view/com/feeds/ComposerPrompt.tsx:222
774msgid "Add image"
775msgstr ""
776···1011msgid "Already signed in as @{0}"
1012msgstr ""
10131014+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:197
1015#: src/view/com/composer/GifAltText.tsx:100
1016#: src/view/com/composer/photos/Gallery.tsx:188
1017msgid "ALT"
···1027msgid "Alt text"
1028msgstr ""
10291030+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:202
1031msgid "Alt Text"
1032msgstr ""
1033···1167msgid "Animals"
1168msgstr ""
11691170+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:160
1171msgid "Animated GIF"
1172msgstr ""
1173···1193msgid "Anyone who follows me"
1194msgstr ""
11951196+#: src/Navigation.tsx:543
1197#: src/screens/Settings/AppIconSettings/index.tsx:67
1198#: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:18
1199#: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:23
···1234msgid "App passwords"
1235msgstr ""
12361237+#: src/Navigation.tsx:354
1238#: src/screens/Settings/AppPasswords.tsx:50
1239msgid "App Passwords"
1240msgstr ""
···1270msgid "Appeal this decision"
1271msgstr ""
12721273+#: src/Navigation.tsx:394
1274#: src/screens/Settings/AppearanceSettings.tsx:73
1275#: src/screens/Settings/Settings.tsx:230
1276#: src/screens/Settings/Settings.tsx:233
···1520msgid "Blocked accounts"
1521msgstr ""
15221523+#: src/Navigation.tsx:195
1524#: src/view/screens/ModerationBlockedAccounts.tsx:104
1525msgid "Blocked Accounts"
1526msgstr ""
···1642msgid "Browse custom feeds"
1643msgstr ""
16441645+#: src/components/FeedInterstitials.tsx:777
1646msgid "Browse more accounts"
1647msgstr ""
16481649+#: src/components/FeedInterstitials.tsx:905
1650msgid "Browse more feeds on the Explore page"
1651msgstr ""
16521653+#: src/components/FeedInterstitials.tsx:886
1654+#: src/components/FeedInterstitials.tsx:889
1655msgid "Browse more suggestions"
1656msgstr ""
16571658+#: src/components/FeedInterstitials.tsx:914
1659msgid "Browse more suggestions on the Explore page"
1660msgstr ""
1661···1872msgstr ""
18731874#: src/lib/hooks/useNotificationHandler.ts:99
1875+#: src/Navigation.tsx:560
1876#: src/view/shell/bottom-bar/BottomBar.tsx:221
1877#: src/view/shell/desktop/LeftNav.tsx:608
1878#: src/view/shell/Drawer.tsx:466
···1898msgid "Chat muted"
1899msgstr ""
19001901+#: src/Navigation.tsx:570
1902#: src/screens/Messages/components/InboxPreview.tsx:22
1903msgid "Chat request inbox"
1904msgstr ""
···1910msgstr ""
19111912#: src/components/dms/ConvoMenu.tsx:78
1913+#: src/Navigation.tsx:565
1914#: src/screens/Messages/ChatList.tsx:81
1915#: src/screens/Messages/ChatList.tsx:85
1916#: src/screens/Messages/ChatList.tsx:380
···2081#: src/components/live/EditLiveDialog.tsx:235
2082#: src/components/NewskieDialog.tsx:167
2083#: src/components/NewskieDialog.tsx:173
2084+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:208
2085#: src/components/ProgressGuide/FollowDialog.tsx:440
2086#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:118
2087#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:124
···2199msgstr ""
22002201#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:45
2202+#: src/Navigation.tsx:344
2203#: src/view/screens/CommunityGuidelines.tsx:37
2204msgid "Community Guidelines"
2205msgstr ""
···22982299#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:93
2300msgid "Contact us"
2301+msgstr ""
2302+2303+#: src/screens/Settings/FindContactsSettings.tsx:498
2304+msgid "Contacts imported"
2305msgstr ""
23062307#: src/screens/Settings/FindContactsSettings.tsx:471
2308msgid "Contacts removed"
2309msgstr ""
231000002311#: src/screens/Settings/ContentAndMediaSettings.tsx:51
2312msgid "Content & Media"
2313msgstr ""
···2317msgid "Content and media"
2318msgstr ""
23192320+#: src/Navigation.tsx:519
2321msgid "Content and Media"
2322msgstr ""
2323···25152516#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:40
2517#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:107
2518+#: src/Navigation.tsx:349
2519#: src/view/screens/CopyrightPolicy.tsx:34
2520msgid "Copyright Policy"
2521msgstr ""
···26042605#: src/components/StarterPack/ProfileStarterPacks.tsx:206
2606#: src/components/StarterPack/ProfileStarterPacks.tsx:315
2607+#: src/Navigation.tsx:600
2608msgid "Create a starter pack"
2609msgstr ""
2610···3230msgid "Edit moderation list"
3231msgstr ""
32323233+#: src/Navigation.tsx:359
3234#: src/view/screens/Feeds.tsx:518
3235msgid "Edit My Feeds"
3236msgstr ""
···3272msgid "Edit who can reply"
3273msgstr ""
32743275+#: src/Navigation.tsx:605
3276msgid "Edit your starter pack"
3277msgstr ""
3278···3601msgid "Explicit sexual images."
3602msgstr ""
36033604+#: src/Navigation.tsx:780
3605#: src/screens/Search/Shell.tsx:327
3606#: src/view/shell/desktop/LeftNav.tsx:690
3607#: src/view/shell/Drawer.tsx:414
···3637msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button."
3638msgstr ""
36393640+#: src/Navigation.tsx:378
3641#: src/screens/Settings/ExternalMediaPreferences.tsx:34
3642msgid "External Media Preferences"
3643msgstr ""
···3874msgid "False information about elections"
3875msgstr ""
38763877+#: src/Navigation.tsx:294
3878msgid "Feed"
3879msgstr ""
3880···3915msgid "Feedback sent to feed operator"
3916msgstr ""
39173918+#: src/Navigation.tsx:585
3919#: src/screens/SavedFeeds.tsx:108
3920#: src/screens/Search/SearchResults.tsx:78
3921#: src/screens/StarterPack/StarterPackScreen.tsx:190
···3986msgid "Find accounts to follow"
3987msgstr ""
39883989+#: src/Navigation.tsx:426
3990+#: src/Navigation.tsx:627
3991msgid "Find Contacts"
3992msgstr ""
3993···4141msgid "Followed by <0>{0}</0>, <1>{1}</1>, and {2, plural, one {# other} other {# others}}"
4142msgstr ""
41434144+#: src/Navigation.tsx:248
4145msgid "Followers of @{0} that you know"
4146msgstr ""
4147···4184msgid "Following feed preferences"
4185msgstr ""
41864187+#: src/Navigation.tsx:365
4188#: src/screens/Settings/FollowingFeedPreferences.tsx:56
4189msgid "Following Feed Preferences"
4190msgstr ""
···4510msgid "Harming or endangering minors"
4511msgstr ""
45124513+#: src/Navigation.tsx:550
4514msgid "Hashtag"
4515msgstr ""
4516···4696msgid "Hold up! We’re gradually giving access to video, and you’re still waiting in line. Check back soon!"
4697msgstr ""
46984699+#: src/Navigation.tsx:775
4700+#: src/Navigation.tsx:795
4701#: src/view/shell/bottom-bar/BottomBar.tsx:178
4702#: src/view/shell/desktop/LeftNav.tsx:672
4703#: src/view/shell/Drawer.tsx:440
···4853msgid "Import contacts to find your friends"
4854msgstr ""
48554856+#: src/screens/Settings/FindContactsSettings.tsx:507
4857+msgid "Imported on {0}"
4858+msgstr ""
4859+4860#: src/ageAssurance/components/NoAccessScreen.tsx:204
4861msgid "In order to provide an age-appropriate experience, we need to know your birthdate. This is a one-time thing, and your data will be kept private."
4862msgstr ""
···5085msgid "Labels on your content"
5086msgstr ""
50875088+#: src/Navigation.tsx:221
5089msgid "Language Settings"
5090msgstr ""
5091···5262msgid "Like 10 posts to train the Discover feed"
5263msgstr ""
52645265+#: src/Navigation.tsx:463
5266msgid "Like notifications"
5267msgstr ""
5268···5274msgid "Like this labeler"
5275msgstr ""
52765277+#: src/Navigation.tsx:299
5278+#: src/Navigation.tsx:304
5279msgid "Liked by"
5280msgstr ""
5281···5310msgid "Likes of your reposts"
5311msgstr ""
53125313+#: src/Navigation.tsx:487
5314msgid "Likes of your reposts notifications"
5315msgstr ""
5316···5323msgid "Linear"
5324msgstr ""
53255326+#: src/Navigation.tsx:254
5327msgid "List"
5328msgstr ""
5329···5403msgid "List unmuted"
5404msgstr ""
54055406+#: src/Navigation.tsx:175
5407#: src/view/screens/Lists.tsx:67
5408#: src/view/screens/Profile.tsx:233
5409#: src/view/screens/Profile.tsx:241
···5468msgid "Loading..."
5469msgstr ""
54705471+#: src/Navigation.tsx:324
5472msgid "Log"
5473msgstr ""
5474···5563msgid "Media that may be disturbing or inappropriate for some audiences."
5564msgstr ""
55655566+#: src/Navigation.tsx:447
5567msgid "Mention notifications"
5568msgstr ""
5569···5616msgid "Message options"
5617msgstr ""
56185619+#: src/Navigation.tsx:790
5620msgid "Messages"
5621msgstr ""
5622···5629msgid "Minor harassment or bullying"
5630msgstr ""
56315632+#: src/Navigation.tsx:511
5633msgid "Miscellaneous notifications"
5634msgstr ""
5635···5637msgid "Misleading"
5638msgstr ""
56395640+#: src/Navigation.tsx:180
5641#: src/screens/Moderation/index.tsx:99
5642#: src/screens/Settings/Settings.tsx:194
5643#: src/screens/Settings/Settings.tsx:197
···5676msgid "Moderation lists"
5677msgstr ""
56785679+#: src/Navigation.tsx:185
5680#: src/view/screens/ModerationModlists.tsx:67
5681msgid "Moderation Lists"
5682msgstr ""
···5685msgid "moderation settings"
5686msgstr ""
56875688+#: src/Navigation.tsx:314
5689msgid "Moderation states"
5690msgstr ""
5691···5808msgid "Muted accounts"
5809msgstr ""
58105811+#: src/Navigation.tsx:190
5812#: src/view/screens/ModerationMutedAccounts.tsx:116
5813msgid "Muted Accounts"
5814msgstr ""
···5907msgid "New Feature"
5908msgstr ""
59095910+#: src/Navigation.tsx:479
5911msgid "New follower notifications"
5912msgstr ""
5913···6213msgid "Not followed by anyone you're following"
6214msgstr ""
62156216+#: src/Navigation.tsx:170
6217#: src/view/screens/Profile.tsx:132
6218msgid "Not Found"
6219msgstr ""
···6239msgid "Nothing saved yet"
6240msgstr ""
62416242+#: src/Navigation.tsx:433
6243+#: src/Navigation.tsx:580
6244#: src/view/screens/Notifications.tsx:136
6245msgid "Notification settings"
6246msgstr ""
···6253msgid "Notification Sounds"
6254msgstr ""
62556256+#: src/Navigation.tsx:575
6257+#: src/Navigation.tsx:785
6258#: src/screens/Notifications/ActivityList.tsx:30
6259#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:90
6260#: src/screens/Settings/NotificationSettings/index.tsx:92
···6396msgid "Open avatar creator"
6397msgstr ""
63986399+#: src/view/com/feeds/ComposerPrompt.tsx:200
6400msgid "Open camera"
6401msgstr ""
6402···6505msgid "Opens composer"
6506msgstr ""
65076508+#: src/view/com/feeds/ComposerPrompt.tsx:201
6509msgid "Opens device camera"
6510msgstr ""
6511···6536msgid "Opens helpdesk in browser"
6537msgstr ""
65386539+#: src/view/com/feeds/ComposerPrompt.tsx:223
6540msgid "Opens image picker"
6541msgstr ""
6542···6679msgid "Password updated!"
6680msgstr ""
66816682+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:44
6683#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:137
6684#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VideoControls.tsx:369
6685msgid "Pause"
···6695msgid "People"
6696msgstr ""
66976698+#: src/Navigation.tsx:241
6699msgid "People followed by @{0}"
6700msgstr ""
67016702+#: src/Navigation.tsx:234
6703msgid "People following @{0}"
6704msgstr ""
6705···6790msgid "Pinned to your feeds"
6791msgstr ""
67926793+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:44
6794#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:137
6795#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VideoControls.tsx:370
6796msgid "Play"
···6809msgid "Play Video"
6810msgstr ""
68116812+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:43
6813msgid "Plays or pauses the GIF"
6814msgstr ""
6815···6957msgid "Please sign in as @{0}"
6958msgstr ""
69596960+#: src/screens/Settings/FindContactsSettings.tsx:102
6961+msgid "Please use the native app to import your contacts."
6962+msgstr ""
6963+6964#: src/screens/FindContactsFlowScreen.tsx:71
06965msgid "Please use the native app to sync your contacts."
6966msgstr ""
6967···7011msgid "Post blocked"
7012msgstr ""
70137014+#: src/Navigation.tsx:267
7015+#: src/Navigation.tsx:274
7016+#: src/Navigation.tsx:281
7017+#: src/Navigation.tsx:288
7018msgid "Post by @{0}"
7019msgstr ""
7020···7048msgid "Post interaction settings"
7049msgstr ""
70507051+#: src/Navigation.tsx:201
7052#: src/screens/ModerationInteractionSettings/index.tsx:34
7053msgid "Post Interaction Settings"
7054msgstr ""
···7147msgid "Privacy and security"
7148msgstr ""
71497150+#: src/Navigation.tsx:410
7151+#: src/Navigation.tsx:418
7152#: src/screens/Settings/ActivityPrivacySettings.tsx:40
7153#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:44
7154msgid "Privacy and Security"
···71617162#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:35
7163#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:102
7164+#: src/Navigation.tsx:334
7165#: src/screens/Settings/AboutSettings.tsx:92
7166#: src/screens/Settings/AboutSettings.tsx:95
7167#: src/view/screens/PrivacyPolicy.tsx:34
···7260msgid "QR code saved to your camera roll!"
7261msgstr ""
72627263+#: src/Navigation.tsx:455
7264msgid "Quote notifications"
7265msgstr ""
7266···7421#: src/components/StarterPack/Wizard/WizardListCard.tsx:105
7422#: src/components/StarterPack/Wizard/WizardListCard.tsx:112
7423#: src/screens/Bookmarks/index.tsx:266
7424+#: src/screens/Settings/Settings.tsx:684
7425#: src/view/com/modals/UserAddRemoveLists.tsx:235
7426#: src/view/com/posts/PostFeedErrorMessage.tsx:220
7427msgid "Remove"
···7435msgid "Remove {historyItem}"
7436msgstr ""
74377438+#: src/screens/Settings/Settings.tsx:663
7439+#: src/screens/Settings/Settings.tsx:666
7440msgid "Remove account"
7441msgstr ""
7442···7481msgid "Remove from my feeds"
7482msgstr ""
74837484+#: src/screens/Settings/Settings.tsx:676
7485msgid "Remove from quick access?"
7486msgstr ""
7487···7648msgid "Reply Hidden by You"
7649msgstr ""
76507651+#: src/Navigation.tsx:439
7652msgid "Reply notifications"
7653msgstr ""
7654···7763msgid "Repost ({0, plural, one {# repost} other {# reposts}})"
7764msgstr ""
77657766+#: src/Navigation.tsx:471
7767msgid "Repost notifications"
7768msgstr ""
7769···7804msgid "Reposts of your reposts"
7805msgstr ""
78067807+#: src/Navigation.tsx:495
7808msgid "Reposts of your reposts notifications"
7809msgstr ""
7810···8013msgstr ""
80148015#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:143
8016+#: src/Navigation.tsx:619
8017#: src/screens/Bookmarks/index.tsx:60
8018msgid "Saved Posts"
8019msgstr ""
···8059msgid "Search"
8060msgstr ""
80618062+#: src/Navigation.tsx:260
8063#: src/screens/Profile/ProfileSearch.tsx:37
8064msgid "Search @{0}'s posts"
8065msgstr ""
···8176msgstr ""
81778178#: src/components/FeedInterstitials.tsx:730
8179+#: src/components/FeedInterstitials.tsx:791
8180msgid "See more"
8181msgstr ""
8182···8455msgid "Sets email for password reset"
8456msgstr ""
84578458+#: src/Navigation.tsx:216
8459#: src/screens/Settings/Settings.tsx:105
8460#: src/view/shell/desktop/LeftNav.tsx:805
8461#: src/view/shell/Drawer.tsx:609
···8600msgid "Share your favorite feed!"
8601msgstr ""
86028603+#: src/Navigation.tsx:319
8604msgid "Shared Preferences Tester"
8605msgstr ""
8606···8610msgid "Show"
8611msgstr ""
86128613+#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:189
8614msgid "Show alt text"
8615msgstr ""
8616···8849msgid "Some of your verifications are invalid."
8850msgstr ""
88518852+#: src/components/FeedInterstitials.tsx:868
8853msgid "Some other feeds you might like"
8854msgstr ""
8855···8963msgid "Start chat with {displayName}"
8964msgstr ""
89658966+#: src/Navigation.tsx:590
8967+#: src/Navigation.tsx:595
8968#: src/screens/StarterPack/Wizard/index.tsx:209
8969msgid "Starter Pack"
8970msgstr ""
···9017msgid "Stored as part of a secure code for matching with others"
9018msgstr ""
90199020+#: src/Navigation.tsx:309
9021#: src/screens/Settings/Settings.tsx:466
9022msgid "Storybook"
9023msgstr ""
···9108msgid "Sunset"
9109msgstr ""
91109111+#: src/Navigation.tsx:329
9112#: src/view/screens/Support.tsx:34
9113#: src/view/screens/Support.tsx:37
9114msgid "Support"
···9222#: src/components/dialogs/BirthDateSettings.tsx:182
9223#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:30
9224#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:97
9225+#: src/Navigation.tsx:339
9226#: src/screens/Settings/AboutSettings.tsx:84
9227#: src/screens/Settings/AboutSettings.tsx:87
9228#: src/view/screens/TermsOfService.tsx:34
···9535msgid "This appeal will be sent to Bluesky's moderation service."
9536msgstr ""
95379538+#: src/screens/PostThread/components/ThreadItemAnchorNoUnauthenticated.tsx:27
9539+#: src/screens/PostThread/components/ThreadItemPostNoUnauthenticated.tsx:47
9540+msgid "This author has chosen to make their posts visible only to people who are signed in."
9541+msgstr ""
9542+9543#: src/screens/Messages/components/MessageListError.tsx:18
9544msgid "This chat was disconnected"
9545msgstr ""
···9749msgid "This will delete \"{0}\" from your muted words. You can always add it back later."
9750msgstr ""
97519752+#: src/screens/Settings/Settings.tsx:678
9753msgid "This will remove @{0} from the quick access list."
9754msgstr ""
9755···9776msgid "Threaded"
9777msgstr ""
97789779+#: src/Navigation.tsx:372
9780msgid "Threads Preferences"
9781msgstr ""
9782···9842msgid "Top replies first"
9843msgstr ""
98449845+#: src/Navigation.tsx:555
9846msgid "Topic"
9847msgstr ""
9848···10212msgid "Upload from Library"
10213msgstr ""
10214000010215#: src/lib/api/index.ts:302
10216msgid "Uploading images..."
10217msgstr ""
···10349msgid "Verification settings"
10350msgstr ""
1035110352+#: src/Navigation.tsx:209
10353#: src/screens/Moderation/VerificationSettings.tsx:32
10354msgid "Verification Settings"
10355msgstr ""
···10455msgid "Video failed to process"
10456msgstr ""
1045710458+#: src/Navigation.tsx:611
10459msgid "Video Feed"
10460msgstr ""
10461···10866#: src/view/com/auth/SplashScreen.tsx:51
10867#: src/view/com/auth/SplashScreen.web.tsx:103
10868#: src/view/com/composer/Composer.tsx:857
10869+#: src/view/com/feeds/ComposerPrompt.tsx:191
10870msgid "What's up?"
10871msgstr ""
10872···11286msgid "You must grant access to your photo library to save a QR code"
11287msgstr ""
112880000011289#: src/view/com/composer/SelectMediaButton.tsx:442
11290msgid "You need to allow access to your media library."
11291msgstr ""
···11527msgid "Your full handle will be <0>@{0}</0>"
11528msgstr ""
1152911530+#: src/Navigation.tsx:527
11531#: src/screens/Search/modules/ExploreInterestsCard.tsx:67
11532#: src/screens/Settings/ContentAndMediaSettings.tsx:92
11533#: src/screens/Settings/ContentAndMediaSettings.tsx:95
+2-2
src/screens/Messages/components/MessageInput.tsx
···14import {useSafeAreaInsets} from 'react-native-safe-area-context'
15import {msg} from '@lingui/macro'
16import {useLingui} from '@lingui/react'
17-import Graphemer from 'graphemer'
1819import {HITSLOP_10, MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
20import {useHaptics} from '#/lib/haptics'
···78 if (!hasEmbed && message.trim() === '') {
79 return
80 }
81- if (new Graphemer().countGraphemes(message) > MAX_DM_GRAPHEME_LENGTH) {
82 Toast.show(_(msg`Message is too long`), 'xmark')
83 return
84 }
···14import {useSafeAreaInsets} from 'react-native-safe-area-context'
15import {msg} from '@lingui/macro'
16import {useLingui} from '@lingui/react'
17+import {countGraphemes} from 'unicode-segmenter/grapheme'
1819import {HITSLOP_10, MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
20import {useHaptics} from '#/lib/haptics'
···78 if (!hasEmbed && message.trim() === '') {
79 return
80 }
81+ if (countGraphemes(message) > MAX_DM_GRAPHEME_LENGTH) {
82 Toast.show(_(msg`Message is too long`), 'xmark')
83 return
84 }
···2import {Pressable, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5-import Graphemer from 'graphemer'
6import {flushSync} from 'react-dom'
7import TextareaAutosize from 'react-textarea-autosize'
089import {isSafari, isTouchDevice} from '#/lib/browser'
10import {MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
···59 if (!hasEmbed && message.trim() === '') {
60 return
61 }
62- if (new Graphemer().countGraphemes(message) > MAX_DM_GRAPHEME_LENGTH) {
63 Toast.show(_(msg`Message is too long`), 'xmark')
64 return
65 }
···2import {Pressable, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
05import {flushSync} from 'react-dom'
6import TextareaAutosize from 'react-textarea-autosize'
7+import {countGraphemes} from 'unicode-segmenter/grapheme'
89import {isSafari, isTouchDevice} from '#/lib/browser'
10import {MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
···59 if (!hasEmbed && message.trim() === '') {
60 return
61 }
62+ if (countGraphemes(message) > MAX_DM_GRAPHEME_LENGTH) {
63 Toast.show(_(msg`Message is too long`), 'xmark')
64 return
65 }
···2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5-import deepEqual from 'lodash.isequal'
67import {logger} from '#/logger'
8import {usePostInteractionSettingsMutation} from '#/state/queries/post-interaction-settings'
···2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5+import deepEqual from 'fast-deep-equal'
67import {logger} from '#/logger'
8import {usePostInteractionSettingsMutation} from '#/state/queries/post-interaction-settings'
···2425 <View style={[a.py_sm]}>
26 <Text style={[a.text_xl, a.italic, t.atoms.text_contrast_medium]}>
27- <Trans>You must sign in to view this post.</Trans>
00028 </Text>
29 </View>
30 </View>
···2425 <View style={[a.py_sm]}>
26 <Text style={[a.text_xl, a.italic, t.atoms.text_contrast_medium]}>
27+ <Trans>
28+ This author has chosen to make their posts visible only to people
29+ who are signed in.
30+ </Trans>
31 </Text>
32 </View>
33 </View>
···44 </Skele.Circle>
4546 <Text style={[a.text_md, a.italic, t.atoms.text_contrast_medium]}>
47- <Trans>You must sign in to view this post.</Trans>
00048 </Text>
49 </Skele.Row>
50 <View
···44 </Skele.Circle>
4546 <Text style={[a.text_md, a.italic, t.atoms.text_contrast_medium]}>
47+ <Trans>
48+ This author has chosen to make their posts visible only to people
49+ who are signed in.
50+ </Trans>
51 </Text>
52 </Skele.Row>
53 <View
+3-3
src/screens/Profile/Header/EditProfileDialog.tsx
···67import {urls} from '#/lib/constants'
8import {cleanError} from '#/lib/strings/errors'
9-import {useWarnMaxGraphemeCount} from '#/lib/strings/helpers'
10import {logger} from '#/logger'
11import {type ImageMeta} from '#/state/gallery'
12import {useEnableSquareAvatars} from '#/state/preferences/enable-square-avatars'
···208 _,
209 ])
210211- const displayNameTooLong = useWarnMaxGraphemeCount({
212 text: displayName,
213 maxCount: DISPLAY_NAME_MAX_GRAPHEMES,
214 })
215- const descriptionTooLong = useWarnMaxGraphemeCount({
216 text: description,
217 maxCount: DESCRIPTION_MAX_GRAPHEMES,
218 })
···67import {urls} from '#/lib/constants'
8import {cleanError} from '#/lib/strings/errors'
9+import {isOverMaxGraphemeCount} from '#/lib/strings/helpers'
10import {logger} from '#/logger'
11import {type ImageMeta} from '#/state/gallery'
12import {useEnableSquareAvatars} from '#/state/preferences/enable-square-avatars'
···208 _,
209 ])
210211+ const displayNameTooLong = isOverMaxGraphemeCount({
212 text: displayName,
213 maxCount: DISPLAY_NAME_MAX_GRAPHEMES,
214 })
215+ const descriptionTooLong = isOverMaxGraphemeCount({
216 text: description,
217 maxCount: DESCRIPTION_MAX_GRAPHEMES,
218 })
···4import {type AppBskyFeedPostgate} from '@atproto/api'
5import {msg, Trans} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
7-import deepEqual from 'lodash.isequal'
89import {isNetworkError} from '#/lib/strings/errors'
10import {logger} from '#/logger'
···4import {type AppBskyFeedPostgate} from '@atproto/api'
5import {msg, Trans} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
7+import deepEqual from 'fast-deep-equal'
89import {isNetworkError} from '#/lib/strings/errors'
10import {logger} from '#/logger'
···27 'unicode-segmenter/grapheme': require
28 .resolve('unicode-segmenter/grapheme')
29 .replace(/\.cjs$/, '.js'),
30+ 'react-native-gesture-handler': false, // RNGH should not be used on web, so let's cause a build error if it sneaks in
31 })
32 config.module.rules = [
33 ...(config.module.rules || []),