Mark more texts for localization
parent
836cff306e
commit
3f5bdd8be3
|
@ -85,7 +85,9 @@ export function AdultContentEnabledPref({
|
|||
a.align_center,
|
||||
a.py_md,
|
||||
]}>
|
||||
<Text style={[a.font_bold]}>Enable Adult Content</Text>
|
||||
<Text style={[a.font_bold]}>
|
||||
<Trans>Enable Adult Content</Trans>
|
||||
</Text>
|
||||
<Toggle.Switch />
|
||||
</View>
|
||||
</Toggle.Item>
|
||||
|
@ -106,7 +108,9 @@ export function AdultContentEnabledPref({
|
|||
)}
|
||||
|
||||
<Prompt.Outer control={prompt}>
|
||||
<Prompt.Title>Adult Content</Prompt.Title>
|
||||
<Prompt.Title>
|
||||
<Trans>Adult Content</Trans>
|
||||
</Prompt.Title>
|
||||
<Prompt.Description>
|
||||
<Trans>
|
||||
Due to Apple policies, adult content can only be enabled on the web
|
||||
|
@ -114,7 +118,9 @@ export function AdultContentEnabledPref({
|
|||
</Trans>
|
||||
</Prompt.Description>
|
||||
<Prompt.Actions>
|
||||
<Prompt.Action onPress={prompt.close}>OK</Prompt.Action>
|
||||
<Prompt.Action onPress={prompt.close}>
|
||||
<Trans>OK</Trans>
|
||||
</Prompt.Action>
|
||||
</Prompt.Actions>
|
||||
</Prompt.Outer>
|
||||
</>
|
||||
|
|
|
@ -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`,
|
||||
)}>
|
||||
<Text
|
||||
style={[
|
||||
s.white,
|
||||
|
@ -68,7 +70,9 @@ export function HomeLoggedOutCTA() {
|
|||
onPress={showSignIn}
|
||||
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`,
|
||||
)}>
|
||||
<Text
|
||||
style={[
|
||||
pal.text,
|
||||
|
|
|
@ -66,7 +66,9 @@ export const SplashScreen = ({
|
|||
onPress={onPressCreateAccount}
|
||||
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`,
|
||||
)}>
|
||||
<Text style={[s.white, styles.btnLabel]}>
|
||||
<Trans>Create a new account</Trans>
|
||||
</Text>
|
||||
|
@ -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`,
|
||||
)}>
|
||||
<Text style={[pal.text, styles.btnLabel]}>
|
||||
<Trans>Sign In</Trans>
|
||||
</Text>
|
||||
|
|
|
@ -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 <View />
|
||||
}
|
||||
|
@ -40,7 +43,9 @@ export const Policies = ({
|
|||
/>
|
||||
</View>
|
||||
<Text style={[pal.textLight, s.pl5, s.flex1]}>
|
||||
This service has not provided terms of service or a privacy policy.
|
||||
<Trans>
|
||||
This service has not provided terms of service or a privacy policy.
|
||||
</Trans>
|
||||
</Text>
|
||||
</View>
|
||||
)
|
||||
|
@ -51,7 +56,7 @@ export const Policies = ({
|
|||
<TextLink
|
||||
key="tos"
|
||||
href={tos}
|
||||
text="Terms of Service"
|
||||
text={_(msg`Terms of Service`)}
|
||||
style={[pal.link, s.underline]}
|
||||
/>,
|
||||
)
|
||||
|
@ -61,7 +66,7 @@ export const Policies = ({
|
|||
<TextLink
|
||||
key="pp"
|
||||
href={pp}
|
||||
text="Privacy Policy"
|
||||
text={_(msg`Privacy Policy`)}
|
||||
style={[pal.link, s.underline]}
|
||||
/>,
|
||||
)
|
||||
|
@ -79,12 +84,14 @@ export const Policies = ({
|
|||
return (
|
||||
<View style={styles.policies}>
|
||||
<Text style={pal.textLight}>
|
||||
By creating an account you agree to the {els}.
|
||||
<Trans>By creating an account you agree to the {els}.</Trans>
|
||||
</Text>
|
||||
{needsGuardian && (
|
||||
<Text style={[pal.textLight, s.bold]}>
|
||||
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.
|
||||
<Trans>
|
||||
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.
|
||||
</Trans>
|
||||
</Text>
|
||||
)}
|
||||
</View>
|
||||
|
|
|
@ -30,7 +30,7 @@ export function Step3({
|
|||
<TextInput
|
||||
testID="handleInput"
|
||||
icon="at"
|
||||
placeholder="e.g. alice"
|
||||
placeholder={_(msg`e.g. alice`)}
|
||||
value={uiState.handle}
|
||||
editable
|
||||
autoFocus
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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 @@ export function ProfileCard({
|
|||
}) {
|
||||
const {track} = useAnalytics()
|
||||
const pal = usePalette('default')
|
||||
const {_} = useLingui()
|
||||
const [addingMoreSuggestions, setAddingMoreSuggestions] =
|
||||
React.useState(false)
|
||||
const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
|
||||
|
@ -133,7 +135,7 @@ export 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`)}
|
||||
/>
|
||||
</View>
|
||||
{profile.description ? (
|
||||
|
|
|
@ -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 (
|
||||
<View style={[styles.container]} testID="welcomeOnboarding">
|
||||
|
@ -91,7 +93,7 @@ export function WelcomeMobile({next, skip}: Props) {
|
|||
|
||||
<Button
|
||||
onPress={next}
|
||||
label="Continue"
|
||||
label={_(msg`Continue`)}
|
||||
testID="continueBtn"
|
||||
style={[styles.buttonContainer]}
|
||||
labelStyle={styles.buttonText}
|
||||
|
|
|
@ -115,7 +115,7 @@ export function ServerInputDialog({
|
|||
testID="customServerTextInput"
|
||||
value={customAddress}
|
||||
onChangeText={setCustomAddress}
|
||||
label={_(msg`my-server.com`)}
|
||||
label="my-server.com"
|
||||
accessibilityLabelledBy="address-input-label"
|
||||
autoCapitalize="none"
|
||||
keyboardType="url"
|
||||
|
|
|
@ -78,9 +78,9 @@ function LightboxFooter({imageIndex}: {imageIndex: number}) {
|
|||
|
||||
try {
|
||||
await saveImageToMediaLibrary({uri})
|
||||
Toast.show('Saved to your camera roll.')
|
||||
Toast.show(_(msg`Saved to your camera roll.`))
|
||||
} catch (e: any) {
|
||||
Toast.show(`Failed to save image: ${String(e)}`)
|
||||
Toast.show(_(msg`Failed to save image: ${String(e)}`))
|
||||
}
|
||||
},
|
||||
[permissionResponse, requestPermission, _],
|
||||
|
|
|
@ -150,7 +150,7 @@ export function Inner({
|
|||
accessibilityHint={_(msg`Exits handle change process`)}
|
||||
onAccessibilityEscape={onPressCancel}>
|
||||
<Text type="lg" style={pal.textLight}>
|
||||
Cancel
|
||||
<Trans>Cancel</Trans>
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
@ -254,7 +254,7 @@ function ProvidedHandleForm({
|
|||
<TextInput
|
||||
testID="setHandleInput"
|
||||
style={[pal.text, styles.textInput]}
|
||||
placeholder="e.g. alice"
|
||||
placeholder={_(msg`e.g. alice`)}
|
||||
placeholderTextColor={pal.colors.textLight}
|
||||
autoCapitalize="none"
|
||||
keyboardAppearance={theme.colorScheme}
|
||||
|
@ -277,8 +277,8 @@ function ProvidedHandleForm({
|
|||
<TouchableOpacity
|
||||
onPress={onToggleCustom}
|
||||
accessibilityRole="button"
|
||||
accessibilityHint="Hosting provider"
|
||||
accessibilityLabel={_(msg`Opens modal for using custom domain`)}>
|
||||
accessibilityLabel={_(msg`Hosting provider`)}
|
||||
accessibilityHint={_(msg`Opens modal for using custom domain`)}>
|
||||
<Text type="md-medium" style={[pal.link, s.pl10, s.pt5]}>
|
||||
<Trans>I have my own domain</Trans>
|
||||
</Text>
|
||||
|
@ -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({
|
|||
<TextInput
|
||||
testID="setHandleInput"
|
||||
style={[pal.text, styles.textInput]}
|
||||
placeholder="e.g. alice.com"
|
||||
placeholder={_(msg`e.g. alice.com`)}
|
||||
placeholderTextColor={pal.colors.textLight}
|
||||
autoCapitalize="none"
|
||||
keyboardAppearance={theme.colorScheme}
|
||||
|
@ -387,7 +387,7 @@ function CustomHandleForm({
|
|||
editable={!isProcessing}
|
||||
accessibilityLabelledBy="customDomain"
|
||||
accessibilityLabel={_(msg`Custom domain`)}
|
||||
accessibilityHint="Input your preferred hosting provider"
|
||||
accessibilityHint={_(msg`Input your preferred hosting provider`)}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.spacer} />
|
||||
|
@ -395,18 +395,18 @@ function CustomHandleForm({
|
|||
<View style={[styles.selectableBtns]}>
|
||||
<SelectableBtn
|
||||
selected={isDNSForm}
|
||||
label="DNS Panel"
|
||||
label={_(msg`DNS Panel`)}
|
||||
left
|
||||
onSelect={() => setDNSForm(true)}
|
||||
accessibilityHint="Use the DNS panel"
|
||||
accessibilityHint={_(msg`Use the DNS panel`)}
|
||||
style={s.flex1}
|
||||
/>
|
||||
<SelectableBtn
|
||||
selected={!isDNSForm}
|
||||
label="No DNS Panel"
|
||||
label={_(msg`No DNS Panel`)}
|
||||
right
|
||||
onSelect={() => setDNSForm(false)}
|
||||
accessibilityHint="Use a file on your server"
|
||||
accessibilityHint={_(msg`Use a file on your server`)}
|
||||
style={s.flex1}
|
||||
/>
|
||||
</View>
|
||||
|
@ -418,7 +418,7 @@ function CustomHandleForm({
|
|||
</Text>
|
||||
<View style={[styles.dnsTable, pal.btn]}>
|
||||
<Text type="md-medium" style={[styles.dnsLabel, pal.text]}>
|
||||
Host:
|
||||
<Trans>Host:</Trans>
|
||||
</Text>
|
||||
<View style={[styles.dnsValue]}>
|
||||
<Text type="mono" style={[styles.monoText, pal.text]}>
|
||||
|
@ -426,7 +426,7 @@ function CustomHandleForm({
|
|||
</Text>
|
||||
</View>
|
||||
<Text type="md-medium" style={[styles.dnsLabel, pal.text]}>
|
||||
Type:
|
||||
<Trans>Type:</Trans>
|
||||
</Text>
|
||||
<View style={[styles.dnsValue]}>
|
||||
<Text type="mono" style={[styles.monoText, pal.text]}>
|
||||
|
@ -434,7 +434,7 @@ function CustomHandleForm({
|
|||
</Text>
|
||||
</View>
|
||||
<Text type="md-medium" style={[styles.dnsLabel, pal.text]}>
|
||||
Value:
|
||||
<Trans>Value:</Trans>
|
||||
</Text>
|
||||
<View style={[styles.dnsValue]}>
|
||||
<Text type="mono" style={[styles.monoText, pal.text]}>
|
||||
|
@ -443,7 +443,7 @@ function CustomHandleForm({
|
|||
</View>
|
||||
</View>
|
||||
<Text type="md" style={[pal.text, s.pt20, s.pl5]}>
|
||||
This should create a domain record at:{' '}
|
||||
<Trans>This should create a domain record at:</Trans>
|
||||
</Text>
|
||||
<Text type="mono" style={[styles.monoText, pal.text, s.pt5, s.pl5]}>
|
||||
_atproto.{handle}
|
||||
|
@ -463,7 +463,7 @@ function CustomHandleForm({
|
|||
</View>
|
||||
<View style={styles.spacer} />
|
||||
<Text type="md" style={[pal.text, s.pb5, s.pl5]}>
|
||||
That contains the following:
|
||||
<Trans>That contains the following:</Trans>
|
||||
</Text>
|
||||
<View style={[styles.valueContainer, pal.btn]}>
|
||||
<View style={[styles.dnsValue]}>
|
||||
|
@ -478,7 +478,9 @@ function CustomHandleForm({
|
|||
<View style={styles.spacer} />
|
||||
<Button type="default" style={[s.p20, s.mb10]} onPress={onPressCopy}>
|
||||
<Text type="xl" style={[pal.link, s.textCenter]}>
|
||||
Copy {isDNSForm ? 'Domain Value' : 'File Contents'}
|
||||
<Trans>
|
||||
Copy {isDNSForm ? _(msg`Domain Value`) : _(msg`File Contents`)}
|
||||
</Trans>
|
||||
</Text>
|
||||
</Button>
|
||||
{canSave === true && (
|
||||
|
@ -504,8 +506,8 @@ function CustomHandleForm({
|
|||
) : (
|
||||
<Text type="xl-medium" style={[s.white, s.textCenter]}>
|
||||
{canSave
|
||||
? `Update to ${handle}`
|
||||
: `Verify ${isDNSForm ? 'DNS Record' : 'Text File'}`}
|
||||
? _(msg`Update to ${handle}`)
|
||||
: _(msg`Verify ${isDNSForm ? 'DNS Record' : 'Text File'}`)}
|
||||
</Text>
|
||||
)}
|
||||
</Button>
|
||||
|
@ -513,9 +515,9 @@ function CustomHandleForm({
|
|||
<TouchableOpacity
|
||||
onPress={onToggleCustom}
|
||||
accessibilityLabel={_(msg`Use default provider`)}
|
||||
accessibilityHint="Use bsky.social as hosting provider">
|
||||
accessibilityHint={_(msg`Use bsky.social as hosting provider`)}>
|
||||
<Text type="md-medium" style={[pal.link, s.pl10, s.pt5]}>
|
||||
Nevermind, create a handle for me
|
||||
<Trans>Nevermind, create a handle for me</Trans>
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</>
|
||||
|
|
|
@ -180,7 +180,7 @@ export function Component() {
|
|||
<TextInput
|
||||
testID="codeInput"
|
||||
style={[pal.text, styles.textInput]}
|
||||
placeholder="Reset code"
|
||||
placeholder={_(msg`Reset code`)}
|
||||
placeholderTextColor={pal.colors.textLight}
|
||||
value={resetCode}
|
||||
onChangeText={setResetCode}
|
||||
|
@ -207,7 +207,7 @@ export function Component() {
|
|||
<TextInput
|
||||
testID="codeInput"
|
||||
style={[pal.text, styles.textInput]}
|
||||
placeholder="New password"
|
||||
placeholder={_(msg`New password`)}
|
||||
placeholderTextColor={pal.colors.textLight}
|
||||
onChangeText={setNewPassword}
|
||||
secureTextEntry
|
||||
|
|
|
@ -173,7 +173,7 @@ export function Component({}: {}) {
|
|||
</Text>
|
||||
<TextInput
|
||||
style={[styles.textInput, pal.borderDark, pal.text, styles.mb20]}
|
||||
placeholder="Confirmation code"
|
||||
placeholder={_(msg`Confirmation code`)}
|
||||
placeholderTextColor={pal.textLight.color}
|
||||
keyboardAppearance={theme.colorScheme}
|
||||
value={confirmCode}
|
||||
|
@ -192,7 +192,7 @@ export function Component({}: {}) {
|
|||
</Text>
|
||||
<TextInput
|
||||
style={[styles.textInput, pal.borderDark, pal.text]}
|
||||
placeholder="Password"
|
||||
placeholder={_(msg`Password`)}
|
||||
placeholderTextColor={pal.textLight.color}
|
||||
keyboardAppearance={theme.colorScheme}
|
||||
secureTextEntry
|
||||
|
@ -228,7 +228,7 @@ export function Component({}: {}) {
|
|||
onPress={onCancel}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Cancel account deletion`)}
|
||||
accessibilityHint="Exits account deletion process"
|
||||
accessibilityHint={_(msg`Exits account deletion process`)}
|
||||
onAccessibilityEscape={onCancel}>
|
||||
<Text type="button-lg" style={pal.textLight}>
|
||||
<Trans context="action">Cancel</Trans>
|
||||
|
|
|
@ -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]}
|
||||
/>
|
||||
|
|
|
@ -74,7 +74,7 @@ export function Component({text, href}: {text: string; href: string}) {
|
|||
onPress={onPressVisit}
|
||||
accessibilityLabel={_(msg`Visit Site`)}
|
||||
accessibilityHint=""
|
||||
label="Visit Site"
|
||||
label={_(msg`Visit Site`)}
|
||||
labelContainerStyle={{justifyContent: 'center', padding: 4}}
|
||||
labelStyle={[s.f18]}
|
||||
/>
|
||||
|
@ -86,7 +86,7 @@ export function Component({text, href}: {text: string; href: string}) {
|
|||
}}
|
||||
accessibilityLabel={_(msg`Cancel`)}
|
||||
accessibilityHint=""
|
||||
label="Cancel"
|
||||
label={_(msg`Cancel`)}
|
||||
labelContainerStyle={{justifyContent: 'center', padding: 4}}
|
||||
labelStyle={[s.f18]}
|
||||
/>
|
||||
|
|
|
@ -115,7 +115,7 @@ export function Component({
|
|||
closeModal()
|
||||
}}>
|
||||
<Text type="button-lg" style={[pal.textLight, s.textCenter, s.white]}>
|
||||
Okay
|
||||
<Trans>Okay</Trans>
|
||||
</Text>
|
||||
</Button>
|
||||
</View>
|
||||
|
|
|
@ -149,7 +149,7 @@ export function Component({showReminder}: {showReminder?: boolean}) {
|
|||
onPress={onEmailIncorrect}
|
||||
style={styles.changeEmailLink}>
|
||||
<Text type="lg" style={pal.link}>
|
||||
Change
|
||||
<Trans>Change</Trans>
|
||||
</Text>
|
||||
</Pressable>
|
||||
</>
|
||||
|
|
|
@ -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`)}>
|
||||
<RectWideIcon
|
||||
size={24}
|
||||
style={as === AspectRatio.Wide ? s.blue3 : pal.text}
|
||||
|
@ -110,7 +110,7 @@ export function Component({
|
|||
onPress={doSetAs(AspectRatio.Tall)}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Tall`)}
|
||||
accessibilityHint="Sets image aspect ratio to tall">
|
||||
accessibilityHint={_(msg`Sets image aspect ratio to tall`)}>
|
||||
<RectTallIcon
|
||||
size={24}
|
||||
style={as === AspectRatio.Tall ? s.blue3 : pal.text}
|
||||
|
@ -120,7 +120,7 @@ export function Component({
|
|||
onPress={doSetAs(AspectRatio.Square)}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Square`)}
|
||||
accessibilityHint="Sets image aspect ratio to square">
|
||||
accessibilityHint={_(msg`Sets image aspect ratio to square`)}>
|
||||
<SquareIcon
|
||||
size={24}
|
||||
style={as === AspectRatio.Square ? s.blue3 : pal.text}
|
||||
|
@ -132,9 +132,9 @@ export function Component({
|
|||
onPress={onPressCancel}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Cancel image crop`)}
|
||||
accessibilityHint="Exits image cropping process">
|
||||
accessibilityHint={_(msg`Exits image cropping process`)}>
|
||||
<Text type="xl" style={pal.link}>
|
||||
Cancel
|
||||
<Trans>Cancel</Trans>
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
<View style={s.flex1} />
|
||||
|
@ -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`)}>
|
||||
<LinearGradient
|
||||
colors={[gradients.blueLight.start, gradients.blueLight.end]}
|
||||
start={{x: 0, y: 0}}
|
||||
|
|
|
@ -39,7 +39,7 @@ export function InputIssueDetails({
|
|||
onPress={goBack}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Add details`)}
|
||||
accessibilityHint="Add more details to your report">
|
||||
accessibilityHint={_(msg`Add more details to your report`)}>
|
||||
<FontAwesomeIcon size={18} icon="angle-left" style={[pal.link]} />
|
||||
<Text style={[pal.text, s.f18, pal.link]}>
|
||||
{' '}
|
||||
|
@ -49,8 +49,8 @@ export function InputIssueDetails({
|
|||
<View style={[pal.btn, styles.detailsInputContainer]}>
|
||||
<TextInput
|
||||
accessibilityLabel={_(msg`Text input field`)}
|
||||
accessibilityHint="Enter a reason for reporting this post."
|
||||
placeholder="Enter a reason or any other details here."
|
||||
accessibilityHint={_(msg`Enter a reason for reporting this post.`)}
|
||||
placeholder={_(msg`Enter a reason or any other details here.`)}
|
||||
placeholderTextColor={pal.textLight.color}
|
||||
value={details}
|
||||
onChangeText={setDetails}
|
||||
|
|
|
@ -41,6 +41,7 @@ type ReportComponentProps =
|
|||
export function Component(content: ReportComponentProps) {
|
||||
const {closeModal} = useModalControls()
|
||||
const pal = usePalette('default')
|
||||
const {_} = useLingui()
|
||||
const {isMobile} = useWebMediaQueries()
|
||||
const [isProcessing, setIsProcessing] = useState(false)
|
||||
const [showDetailsInput, setShowDetailsInput] = useState(false)
|
||||
|
@ -77,7 +78,9 @@ export function Component(content: ReportComponentProps) {
|
|||
},
|
||||
reason: details,
|
||||
})
|
||||
Toast.show("Thank you for your report! We'll look into it promptly.")
|
||||
Toast.show(
|
||||
_(msg`Thank you for your report! We'll look into it promptly.`),
|
||||
)
|
||||
|
||||
closeModal()
|
||||
return
|
||||
|
@ -189,7 +192,7 @@ const SelectIssue = ({
|
|||
onPress={goToDetails}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Add details`)}
|
||||
accessibilityHint="Add more details to your report">
|
||||
accessibilityHint={_(msg`Add more details to your report`)}>
|
||||
<Text style={[s.f18, pal.link]}>
|
||||
<Trans>Add details to report</Trans>
|
||||
</Text>
|
||||
|
|
|
@ -296,7 +296,7 @@ let PostThreadItemLoaded = ({
|
|||
color={pal.colors.textLight}
|
||||
/>
|
||||
<Text type="sm-medium" style={pal.textLight}>
|
||||
Muted
|
||||
<Trans>Muted</Trans>
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
|
@ -578,7 +578,7 @@ let PostThreadItemLoaded = ({
|
|||
title={itemTitle}
|
||||
noFeedback>
|
||||
<Text type="sm-medium" style={pal.textLight}>
|
||||
More
|
||||
<Trans>More</Trans>
|
||||
</Text>
|
||||
<FontAwesomeIcon
|
||||
icon="angle-right"
|
||||
|
|
|
@ -21,7 +21,8 @@ import {useModerationOpts} from '#/state/queries/preferences'
|
|||
import {useSuggestedFollowsByActorQuery} from '#/state/queries/suggested-follows'
|
||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||
import {useProfileFollowMutationQueue} from '#/state/queries/profile'
|
||||
import {Trans} from '@lingui/macro'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {Trans, msg} from '@lingui/macro'
|
||||
|
||||
const OUTER_PADDING = 10
|
||||
const INNER_PADDING = 14
|
||||
|
@ -168,6 +169,7 @@ function SuggestedFollow({
|
|||
}) {
|
||||
const {track} = useAnalytics()
|
||||
const pal = usePalette('default')
|
||||
const {_} = useLingui()
|
||||
const moderationOpts = useModerationOpts()
|
||||
const profile = useProfileShadow(profileUnshadowed)
|
||||
const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
|
||||
|
@ -178,20 +180,20 @@ function SuggestedFollow({
|
|||
await queueFollow()
|
||||
} catch (e: any) {
|
||||
if (e?.name !== 'AbortError') {
|
||||
Toast.show('An issue occurred, please try again.')
|
||||
Toast.show(_(msg`An issue occurred, please try again.`))
|
||||
}
|
||||
}
|
||||
}, [queueFollow, track])
|
||||
}, [queueFollow, track, _])
|
||||
|
||||
const onPressUnfollow = React.useCallback(async () => {
|
||||
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
|
||||
|
@ -236,7 +238,7 @@ function SuggestedFollow({
|
|||
</View>
|
||||
|
||||
<Button
|
||||
label={following ? 'Unfollow' : 'Follow'}
|
||||
label={following ? _(msg`Unfollow`) : _(msg`Follow`)}
|
||||
type="inverted"
|
||||
labelStyle={{textAlign: 'center'}}
|
||||
onPress={following ? onPressUnfollow : onPressFollow}
|
||||
|
|
|
@ -97,7 +97,7 @@ export function LanguageSettingsScreen(_props: Props) {
|
|||
<Text style={[pal.text, s.pb10]}>
|
||||
<Trans>
|
||||
Select your app language for the default text to display in the
|
||||
app
|
||||
app.
|
||||
</Trans>
|
||||
</Text>
|
||||
|
||||
|
|
|
@ -69,8 +69,8 @@ export function ModerationScreen({}: Props) {
|
|||
style={[styles.linkCard, pal.view]}
|
||||
onPress={onPressContentFiltering}
|
||||
accessibilityRole="tab"
|
||||
accessibilityHint="Content filtering"
|
||||
accessibilityLabel="">
|
||||
accessibilityLabel={_(msg`Content filtering`)}
|
||||
accessibilityHint="">
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<FontAwesomeIcon
|
||||
icon="eye"
|
||||
|
|
|
@ -103,7 +103,7 @@ export function ProfileFeedScreen(props: Props) {
|
|||
<Button
|
||||
type="default"
|
||||
accessibilityLabel={_(msg`Go Back`)}
|
||||
accessibilityHint="Return to previous page"
|
||||
accessibilityHint={_(msg`Return to previous page`)}
|
||||
onPress={onPressBack}
|
||||
style={{flexShrink: 1}}>
|
||||
<Text type="button" style={pal.text}>
|
||||
|
|
|
@ -531,8 +531,8 @@ export function SettingsScreen({}: Props) {
|
|||
]}
|
||||
onPress={openHomeFeedPreferences}
|
||||
accessibilityRole="button"
|
||||
accessibilityHint=""
|
||||
accessibilityLabel={_(msg`Opens the home feed preferences`)}>
|
||||
accessibilityLabel={_(msg`Home feed preferences`)}
|
||||
accessibilityHint={_(msg`Opens the home feed preferences`)}>
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<FontAwesomeIcon
|
||||
icon="sliders"
|
||||
|
@ -552,8 +552,8 @@ export function SettingsScreen({}: Props) {
|
|||
]}
|
||||
onPress={openThreadsPreferences}
|
||||
accessibilityRole="button"
|
||||
accessibilityHint=""
|
||||
accessibilityLabel={_(msg`Opens the threads preferences`)}>
|
||||
accessibilityLabel={_(msg`Thread preferences`)}
|
||||
accessibilityHint={_(msg`Opens the threads preferences`)}>
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<FontAwesomeIcon
|
||||
icon={['far', 'comments']}
|
||||
|
@ -572,8 +572,8 @@ export function SettingsScreen({}: Props) {
|
|||
pal.view,
|
||||
isSwitchingAccounts && styles.dimmed,
|
||||
]}
|
||||
accessibilityHint="My Saved Feeds"
|
||||
accessibilityLabel={_(msg`Opens screen with all saved feeds`)}
|
||||
accessibilityLabel={_(msg`My saved feeds`)}
|
||||
accessibilityHint={_(msg`Opens screen with all saved feeds`)}
|
||||
onPress={onPressSavedFeeds}>
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<HashtagIcon style={pal.text} size={18} strokeWidth={3} />
|
||||
|
@ -730,7 +730,9 @@ export function SettingsScreen({}: Props) {
|
|||
onPress={() => openModal({name: 'change-password'})}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Change password`)}
|
||||
accessibilityHint={_(msg`Change your Bluesky password`)}>
|
||||
accessibilityHint={_(
|
||||
msg`Opens modal for change your Bluesky password`,
|
||||
)}>
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<FontAwesomeIcon
|
||||
icon="lock"
|
||||
|
@ -752,7 +754,7 @@ export function SettingsScreen({}: Props) {
|
|||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Export my data`)}
|
||||
accessibilityHint={_(
|
||||
msg`Download Bluesky account data (repository)`,
|
||||
msg`Opens modal for download Bluesky account data (repository)`,
|
||||
)}>
|
||||
<View style={[styles.iconContainer, pal.btn]}>
|
||||
<FontAwesomeIcon
|
||||
|
@ -789,8 +791,8 @@ export function SettingsScreen({}: Props) {
|
|||
style={[pal.view, styles.linkCardNoIcon]}
|
||||
onPress={onPressSystemLog}
|
||||
accessibilityRole="button"
|
||||
accessibilityHint="Open system log"
|
||||
accessibilityLabel={_(msg`Opens the system log page`)}>
|
||||
accessibilityLabel={_(msg`Open system log`)}
|
||||
accessibilityHint={_(msg`Opens the system log page`)}>
|
||||
<Text type="lg" style={pal.text}>
|
||||
<Trans>System log</Trans>
|
||||
</Text>
|
||||
|
@ -811,7 +813,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`)}>
|
||||
<Text type="lg" style={pal.text}>
|
||||
<Trans>Reset preferences state</Trans>
|
||||
|
@ -821,7 +823,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`)}>
|
||||
<Text type="lg" style={pal.text}>
|
||||
<Trans>Reset onboarding state</Trans>
|
||||
|
@ -832,7 +834,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`)}>
|
||||
<Text type="lg" style={pal.text}>
|
||||
<Trans>
|
||||
Clear all legacy storage data (restart after this)
|
||||
|
@ -844,7 +846,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`)}>
|
||||
<Text type="lg" style={pal.text}>
|
||||
<Trans>Clear all storage data (restart after this)</Trans>
|
||||
</Text>
|
||||
|
@ -933,7 +935,7 @@ function EmailConfirmationNotice() {
|
|||
]}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Verify my email`)}
|
||||
accessibilityHint=""
|
||||
accessibilityHint={_(msg`Opens modal for email verification`)}
|
||||
onPress={() => openModal({name: 'verify-email'})}>
|
||||
<FontAwesomeIcon
|
||||
icon="envelope"
|
||||
|
|
|
@ -58,7 +58,7 @@ let NavSignupCard = ({}: {}): React.ReactNode => {
|
|||
accessibilityHint={_(msg`Sign in`)}
|
||||
accessibilityLabel={_(msg`Sign in`)}>
|
||||
<Text type="md" style={[pal.text, s.bold]}>
|
||||
Sign in
|
||||
<Trans>Sign in</Trans>
|
||||
</Text>
|
||||
</Button>
|
||||
</View>
|
||||
|
|
Loading…
Reference in New Issue