diff --git a/src/components/Lists.tsx b/src/components/Lists.tsx
index a74484b7..8e4a5800 100644
--- a/src/components/Lists.tsx
+++ b/src/components/Lists.tsx
@@ -2,10 +2,10 @@ import React from 'react'
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
import {View} from 'react-native'
import {useLingui} from '@lingui/react'
+import {Trans, msg} from '@lingui/macro'
import {CenteredView} from 'view/com/util/Views'
import {Loader} from '#/components/Loader'
-import {msg, Trans} from '@lingui/macro'
import {cleanError} from 'lib/strings/errors'
import {Button} from '#/components/Button'
import {Text} from '#/components/Typography'
@@ -59,6 +59,7 @@ function ListFooterMaybeError({
onRetry?: () => Promise
}) {
const t = useTheme()
+ const {_} = useLingui()
if (!isError) return null
@@ -84,7 +85,7 @@ function ListFooterMaybeError({
@@ -149,6 +150,7 @@ export function ListMaybePlaceholder({
const t = useTheme()
const {_} = useLingui()
const {gtMobile, gtTablet} = useBreakpoints()
+ const {_} = useLingui()
if (!isLoading && isError) {
return (
diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx
index 9be9dd86..051e95b9 100644
--- a/src/components/Menu/index.tsx
+++ b/src/components/Menu/index.tsx
@@ -17,7 +17,7 @@ import {
ItemIconProps,
} from '#/components/Menu/types'
import {Button, ButtonText} from '#/components/Button'
-import {msg} from '@lingui/macro'
+import {Trans, msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {isNative} from 'platform/detection'
@@ -209,7 +209,9 @@ function Cancel() {
variant="ghost"
color="secondary"
onPress={() => control.close()}>
- Cancel
+
+ Cancel
+
)
}
diff --git a/src/components/TagMenu/index.tsx b/src/components/TagMenu/index.tsx
index 13e4e7d6..0ed70366 100644
--- a/src/components/TagMenu/index.tsx
+++ b/src/components/TagMenu/index.tsx
@@ -264,7 +264,9 @@ export function TagMenu({
variant="ghost"
color="secondary"
onPress={() => control.close()}>
- Cancel
+
+ Cancel
+
>
)}
diff --git a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
index 0bff5343..aaacaea0 100644
--- a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
+++ b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
@@ -90,7 +90,9 @@ export function AdultContentEnabledPref({
a.align_center,
a.py_md,
]}>
- Enable Adult Content
+
+ Enable Adult Content
+
@@ -111,7 +113,9 @@ export function AdultContentEnabledPref({
)}
- Adult Content
+
+ Adult Content
+
Due to Apple policies, adult content can only be enabled on the web
@@ -119,7 +123,9 @@ export function AdultContentEnabledPref({
- prompt.close()}>OK
+ prompt.close()}>
+ OK
+
>
diff --git a/src/view/com/auth/HomeLoggedOutCTA.tsx b/src/view/com/auth/HomeLoggedOutCTA.tsx
index f796d8ba..a5b5bf7b 100644
--- a/src/view/com/auth/HomeLoggedOutCTA.tsx
+++ b/src/view/com/auth/HomeLoggedOutCTA.tsx
@@ -52,7 +52,9 @@ export function HomeLoggedOutCTA() {
onPress={showCreateAccount}
accessibilityRole="button"
accessibilityLabel={_(msg`Create new account`)}
- accessibilityHint="Opens flow to create a new Bluesky account">
+ accessibilityHint={_(
+ msg`Opens flow to create a new Bluesky account`,
+ )}>
+ accessibilityHint={_(
+ msg`Opens flow to sign into your existing Bluesky account`,
+ )}>
+ accessibilityHint={_(
+ msg`Opens flow to create a new Bluesky account`,
+ )}>
Create a new account
@@ -77,7 +79,9 @@ export const SplashScreen = ({
onPress={onPressSignin}
accessibilityRole="button"
accessibilityLabel={_(msg`Sign in`)}
- accessibilityHint="Opens flow to sign into your existing Bluesky account">
+ accessibilityHint={_(
+ msg`Opens flow to sign into your existing Bluesky account`,
+ )}>
Sign In
diff --git a/src/view/com/auth/create/Policies.tsx b/src/view/com/auth/create/Policies.tsx
index 2c7d6081..803e2ad3 100644
--- a/src/view/com/auth/create/Policies.tsx
+++ b/src/view/com/auth/create/Policies.tsx
@@ -9,6 +9,8 @@ import {TextLink} from '../../util/Link'
import {Text} from '../../util/text/Text'
import {s, colors} from 'lib/styles'
import {usePalette} from 'lib/hooks/usePalette'
+import {Trans, msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
@@ -20,6 +22,7 @@ export const Policies = ({
needsGuardian: boolean
}) => {
const pal = usePalette('default')
+ const {_} = useLingui()
if (!serviceDescription) {
return
}
@@ -40,7 +43,9 @@ export const Policies = ({
/>
- This service has not provided terms of service or a privacy policy.
+
+ This service has not provided terms of service or a privacy policy.
+
)
@@ -51,7 +56,7 @@ export const Policies = ({
,
)
@@ -61,7 +66,7 @@ export const Policies = ({
,
)
@@ -79,12 +84,14 @@ export const Policies = ({
return (
- By creating an account you agree to the {els}.
+ By creating an account you agree to the {els}.
{needsGuardian && (
- If you are not yet an adult according to the laws of your country,
- your parent or legal guardian must read these Terms on your behalf.
+
+ If you are not yet an adult according to the laws of your country,
+ your parent or legal guardian must read these Terms on your behalf.
+
)}
diff --git a/src/view/com/auth/login/LoginForm.tsx b/src/view/com/auth/login/LoginForm.tsx
index fdba9f20..3202d69c 100644
--- a/src/view/com/auth/login/LoginForm.tsx
+++ b/src/view/com/auth/login/LoginForm.tsx
@@ -207,7 +207,7 @@ export const LoginForm = ({
testID="loginPasswordInput"
ref={passwordInputRef}
style={[pal.text, styles.textInput]}
- placeholder="Password"
+ placeholder={_(msg`Password`)}
placeholderTextColor={pal.colors.textLight}
autoCapitalize="none"
autoCorrect={false}
diff --git a/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx b/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
index 434b10c2..dba3f8c5 100644
--- a/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
+++ b/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
@@ -11,7 +11,8 @@ import {Text} from 'view/com/util/text/Text'
import Animated, {FadeInRight} from 'react-native-reanimated'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {useAnalytics} from 'lib/analytics/analytics'
-import {Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {Trans, msg} from '@lingui/macro'
import {Shadow, useProfileShadow} from '#/state/cache/profile-shadow'
import {useProfileFollowMutationQueue} from '#/state/queries/profile'
import {logger} from '#/logger'
@@ -70,6 +71,7 @@ function ProfileCard({
}) {
const {track} = useAnalytics()
const pal = usePalette('default')
+ const {_} = useLingui()
const [addingMoreSuggestions, setAddingMoreSuggestions] =
React.useState(false)
const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(
@@ -136,7 +138,7 @@ function ProfileCard({
type={profile.viewer?.following ? 'default' : 'inverted'}
labelStyle={styles.followButton}
onPress={onToggleFollow}
- label={profile.viewer?.following ? 'Unfollow' : 'Follow'}
+ label={profile.viewer?.following ? _(msg`Unfollow`) : _(msg`Follow`)}
/>
{profile.description ? (
diff --git a/src/view/com/auth/onboarding/WelcomeMobile.tsx b/src/view/com/auth/onboarding/WelcomeMobile.tsx
index 5de1a781..b8659d56 100644
--- a/src/view/com/auth/onboarding/WelcomeMobile.tsx
+++ b/src/view/com/auth/onboarding/WelcomeMobile.tsx
@@ -6,7 +6,8 @@ import {usePalette} from 'lib/hooks/usePalette'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {Button} from 'view/com/util/forms/Button'
import {ViewHeader} from 'view/com/util/ViewHeader'
-import {Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {Trans, msg} from '@lingui/macro'
type Props = {
next: () => void
@@ -15,6 +16,7 @@ type Props = {
export function WelcomeMobile({next, skip}: Props) {
const pal = usePalette('default')
+ const {_} = useLingui()
return (
@@ -91,7 +93,7 @@ export function WelcomeMobile({next, skip}: Props) {
@@ -254,7 +254,7 @@ function ProvidedHandleForm({
+ accessibilityLabel={_(msg`Hosting provider`)}
+ accessibilityHint={_(msg`Opens modal for using custom domain`)}>
I have my own domain
@@ -324,8 +324,8 @@ function CustomHandleForm({
Clipboard.setString(
isDNSForm ? `did=${currentAccount.did}` : currentAccount.did,
)
- Toast.show('Copied to clipboard')
- }, [currentAccount, isDNSForm])
+ Toast.show(_(msg`Copied to clipboard`))
+ }, [currentAccount, isDNSForm, _])
const onChangeHandle = React.useCallback(
(v: string) => {
setHandle(v)
@@ -378,7 +378,7 @@ function CustomHandleForm({
@@ -395,18 +395,18 @@ function CustomHandleForm({
setDNSForm(true)}
- accessibilityHint="Use the DNS panel"
+ accessibilityHint={_(msg`Use the DNS panel`)}
style={s.flex1}
/>
setDNSForm(false)}
- accessibilityHint="Use a file on your server"
+ accessibilityHint={_(msg`Use a file on your server`)}
style={s.flex1}
/>
@@ -418,7 +418,7 @@ function CustomHandleForm({
- Host:
+ Host:
@@ -426,7 +426,7 @@ function CustomHandleForm({
- Type:
+ Type:
@@ -434,7 +434,7 @@ function CustomHandleForm({
- Value:
+ Value:
@@ -443,7 +443,7 @@ function CustomHandleForm({
- This should create a domain record at:{' '}
+ This should create a domain record at:
_atproto.{handle}
@@ -463,7 +463,7 @@ function CustomHandleForm({
- That contains the following:
+ That contains the following:
@@ -478,7 +478,9 @@ function CustomHandleForm({
{canSave === true && (
@@ -504,8 +506,8 @@ function CustomHandleForm({
) : (
{canSave
- ? `Update to ${handle}`
- : `Verify ${isDNSForm ? 'DNS Record' : 'Text File'}`}
+ ? _(msg`Update to ${handle}`)
+ : _(msg`Verify ${isDNSForm ? 'DNS Record' : 'Text File'}`)}
)}
@@ -513,9 +515,9 @@ function CustomHandleForm({
+ accessibilityHint={_(msg`Use bsky.social as hosting provider`)}>
- Nevermind, create a handle for me
+ Nevermind, create a handle for me
>
diff --git a/src/view/com/modals/ChangePassword.tsx b/src/view/com/modals/ChangePassword.tsx
index d8add979..4badc88a 100644
--- a/src/view/com/modals/ChangePassword.tsx
+++ b/src/view/com/modals/ChangePassword.tsx
@@ -137,7 +137,9 @@ export function Component() {
- {stage !== Stages.Done ? 'Change Password' : 'Password Changed'}
+ {stage !== Stages.Done
+ ? _(msg`Change Password`)
+ : _(msg`Password Changed`)}
@@ -180,7 +182,7 @@ export function Component() {
Cancel
diff --git a/src/view/com/modals/InAppBrowserConsent.tsx b/src/view/com/modals/InAppBrowserConsent.tsx
index 86bb46ca..3fa51593 100644
--- a/src/view/com/modals/InAppBrowserConsent.tsx
+++ b/src/view/com/modals/InAppBrowserConsent.tsx
@@ -77,7 +77,7 @@ export function Component({href}: {href: string}) {
}}
accessibilityLabel={_(msg`Cancel`)}
accessibilityHint=""
- label="Cancel"
+ label={_(msg`Cancel`)}
labelContainerStyle={{justifyContent: 'center', padding: 8}}
labelStyle={[s.f18]}
/>
diff --git a/src/view/com/modals/LinkWarning.tsx b/src/view/com/modals/LinkWarning.tsx
index 81fdc728..b5ff6700 100644
--- a/src/view/com/modals/LinkWarning.tsx
+++ b/src/view/com/modals/LinkWarning.tsx
@@ -73,8 +73,8 @@ export function Component({text, href}: {text: string; href: string}) {
type="primary"
onPress={onPressVisit}
accessibilityLabel={_(msg`Visit Site`)}
- accessibilityHint=""
- label="Visit Site"
+ accessibilityHint={_(msg`Opens the linked website`)}
+ label={_(msg`Visit Site`)}
labelContainerStyle={{justifyContent: 'center', padding: 4}}
labelStyle={[s.f18]}
/>
@@ -85,8 +85,8 @@ export function Component({text, href}: {text: string; href: string}) {
closeModal()
}}
accessibilityLabel={_(msg`Cancel`)}
- accessibilityHint=""
- label="Cancel"
+ accessibilityHint={_(msg`Cancels opening the linked website`)}
+ label={_(msg`Cancel`)}
labelContainerStyle={{justifyContent: 'center', padding: 4}}
labelStyle={[s.f18]}
/>
diff --git a/src/view/com/modals/VerifyEmail.tsx b/src/view/com/modals/VerifyEmail.tsx
index 30a57afc..d3086d38 100644
--- a/src/view/com/modals/VerifyEmail.tsx
+++ b/src/view/com/modals/VerifyEmail.tsx
@@ -149,7 +149,7 @@ export function Component({showReminder}: {showReminder?: boolean}) {
onPress={onEmailIncorrect}
style={styles.changeEmailLink}>
- Change
+ Change
>
diff --git a/src/view/com/modals/crop-image/CropImage.web.tsx b/src/view/com/modals/crop-image/CropImage.web.tsx
index 6f094a1f..98a2494e 100644
--- a/src/view/com/modals/crop-image/CropImage.web.tsx
+++ b/src/view/com/modals/crop-image/CropImage.web.tsx
@@ -100,7 +100,7 @@ export function Component({
onPress={doSetAs(AspectRatio.Wide)}
accessibilityRole="button"
accessibilityLabel={_(msg`Wide`)}
- accessibilityHint="Sets image aspect ratio to wide">
+ accessibilityHint={_(msg`Sets image aspect ratio to wide`)}>
+ accessibilityHint={_(msg`Sets image aspect ratio to tall`)}>
+ accessibilityHint={_(msg`Sets image aspect ratio to square`)}>
+ accessibilityHint={_(msg`Exits image cropping process`)}>
- Cancel
+ Cancel
@@ -142,7 +142,7 @@ export function Component({
onPress={onPressDone}
accessibilityRole="button"
accessibilityLabel={_(msg`Save image crop`)}
- accessibilityHint="Saves image crop settings">
+ accessibilityHint={_(msg`Saves image crop settings`)}>
- More
+ More
{
try {
await queueUnfollow()
} catch (e: any) {
if (e?.name !== 'AbortError') {
- Toast.show('An issue occurred, please try again.')
+ Toast.show(_(msg`An issue occurred, please try again.`))
}
}
- }, [queueUnfollow])
+ }, [queueUnfollow, _])
if (!moderationOpts) {
return null
@@ -241,7 +243,7 @@ function SuggestedFollow({
@@ -296,7 +296,7 @@ export function LanguageSettingsScreen(_props: Props) {
type="button"
style={[pal.text, {flexShrink: 1, overflow: 'hidden'}]}
numberOfLines={1}>
- {myLanguages.length ? myLanguages : 'Select languages'}
+ {myLanguages.length ? myLanguages : _(msg`Select languages`)}
diff --git a/src/view/screens/NotFound.tsx b/src/view/screens/NotFound.tsx
index dfa840ab..7d51619b 100644
--- a/src/view/screens/NotFound.tsx
+++ b/src/view/screens/NotFound.tsx
@@ -51,7 +51,13 @@ export const NotFoundScreen = () => {
diff --git a/src/view/screens/ProfileFeed.tsx b/src/view/screens/ProfileFeed.tsx
index 416bbc30..8eeeb5d9 100644
--- a/src/view/screens/ProfileFeed.tsx
+++ b/src/view/screens/ProfileFeed.tsx
@@ -108,8 +108,8 @@ export function ProfileFeedScreen(props: Props) {
diff --git a/src/view/screens/Settings/index.tsx b/src/view/screens/Settings/index.tsx
index 74fc5d3c..46500777 100644
--- a/src/view/screens/Settings/index.tsx
+++ b/src/view/screens/Settings/index.tsx
@@ -487,20 +487,20 @@ export function SettingsScreen({}: Props) {
label={_(msg`System`)}
left
onSelect={() => setColorMode('system')}
- accessibilityHint={_(msg`Set color theme to system setting`)}
+ accessibilityHint={_(msg`Sets color theme to system setting`)}
/>
setColorMode('light')}
- accessibilityHint={_(msg`Set color theme to light`)}
+ accessibilityHint={_(msg`Sets color theme to light`)}
/>
setColorMode('dark')}
- accessibilityHint={_(msg`Set color theme to dark`)}
+ accessibilityHint={_(msg`Sets color theme to dark`)}
/>
@@ -519,14 +519,14 @@ export function SettingsScreen({}: Props) {
label={_(msg`Dim`)}
left
onSelect={() => setDarkTheme('dim')}
- accessibilityHint={_(msg`Set dark theme to the dim theme`)}
+ accessibilityHint={_(msg`Sets dark theme to the dim theme`)}
/>
setDarkTheme('dark')}
- accessibilityHint={_(msg`Set dark theme to the dark theme`)}
+ accessibilityHint={_(msg`Sets dark theme to the dark theme`)}
/>
@@ -546,8 +546,8 @@ export function SettingsScreen({}: Props) {
]}
onPress={openFollowingFeedPreferences}
accessibilityRole="button"
- accessibilityHint=""
- accessibilityLabel={_(msg`Opens the home feed preferences`)}>
+ accessibilityLabel={_(msg`Following feed preferences`)}
+ accessibilityHint={_(msg`Opens the Following feed preferences`)}>
+ accessibilityLabel={_(msg`Thread preferences`)}
+ accessibilityHint={_(msg`Opens the threads preferences`)}>
+ onPress={onPressSavedFeeds}
+ accessibilityRole="button"
+ accessibilityLabel={_(msg`My saved feeds`)}
+ accessibilityHint={_(msg`Opens screen with all saved feeds`)}>
@@ -688,7 +689,7 @@ export function SettingsScreen({}: Props) {
onPress={onPressAppPasswords}
accessibilityRole="button"
accessibilityLabel={_(msg`App password settings`)}
- accessibilityHint={_(msg`Opens the app password settings page`)}>
+ accessibilityHint={_(msg`Opens the app password settings`)}>
+ accessibilityHint={_(
+ msg`Opens modal for choosing or creating a new Bluesky username`,
+ )}>
openModal({name: 'change-password'})}
accessibilityRole="button"
accessibilityLabel={_(msg`Change password`)}
- accessibilityHint={_(msg`Change your Bluesky password`)}>
+ accessibilityHint={_(
+ msg`Opens modal for changing your Bluesky password`,
+ )}>
+ accessibilityLabel={_(msg`Open system log`)}
+ accessibilityHint={_(msg`Opens the system log page`)}>
System log
@@ -836,7 +841,7 @@ export function SettingsScreen({}: Props) {
style={[pal.view, styles.linkCardNoIcon]}
onPress={onPressResetPreferences}
accessibilityRole="button"
- accessibilityLabel={_(msg`Reset preferences`)}
+ accessibilityLabel={_(msg`Reset preferences state`)}
accessibilityHint={_(msg`Resets the preferences state`)}>
Reset preferences state
@@ -846,7 +851,7 @@ export function SettingsScreen({}: Props) {
style={[pal.view, styles.linkCardNoIcon]}
onPress={onPressResetOnboarding}
accessibilityRole="button"
- accessibilityLabel={_(msg`Reset onboarding`)}
+ accessibilityLabel={_(msg`Reset onboarding state`)}
accessibilityHint={_(msg`Resets the onboarding state`)}>
Reset onboarding state
@@ -857,7 +862,7 @@ export function SettingsScreen({}: Props) {
onPress={clearAllLegacyStorage}
accessibilityRole="button"
accessibilityLabel={_(msg`Clear all legacy storage data`)}
- accessibilityHint={_(msg`Clear all legacy storage data`)}>
+ accessibilityHint={_(msg`Clears all legacy storage data`)}>
Clear all legacy storage data (restart after this)
@@ -869,7 +874,7 @@ export function SettingsScreen({}: Props) {
onPress={clearAllStorage}
accessibilityRole="button"
accessibilityLabel={_(msg`Clear all storage data`)}
- accessibilityHint={_(msg`Clear all storage data`)}>
+ accessibilityHint={_(msg`Clears all storage data`)}>
Clear all storage data (restart after this)
@@ -958,7 +963,7 @@ function EmailConfirmationNotice() {
]}
accessibilityRole="button"
accessibilityLabel={_(msg`Verify my email`)}
- accessibilityHint=""
+ accessibilityHint={_(msg`Opens modal for email verification`)}
onPress={() => openModal({name: 'verify-email'})}>
{' '}
{pluralize(profile?.followersCount || 0, 'follower')} ·{' '}
-
- {formatCountShortOnly(profile?.followsCount ?? 0)}
- {' '}
- following
+
+
+ {formatCountShortOnly(profile?.followsCount ?? 0)}
+ {' '}
+ following
+
)
diff --git a/src/view/shell/NavSignupCard.tsx b/src/view/shell/NavSignupCard.tsx
index bae37e83..83d14149 100644
--- a/src/view/shell/NavSignupCard.tsx
+++ b/src/view/shell/NavSignupCard.tsx
@@ -58,7 +58,7 @@ let NavSignupCard = ({}: {}): React.ReactNode => {
accessibilityHint={_(msg`Sign in`)}
accessibilityLabel={_(msg`Sign in`)}>
- Sign in
+ Sign in